C# 方法“System.String GetState(int32)”不支持到SQL的转换

C# 方法“System.String GetState(int32)”不支持到SQL的转换,c#,asp.net,linq,linq-to-entities,linq-to-objects,C#,Asp.net,Linq,Linq To Entities,Linq To Objects,我正在使用下面的代码获取状态。我发现错误方法“System.String GetStateint32”不支持到SQL的转换。请告诉我哪里出错 public IQueryable<ViewModel> GetResult() { IQueryable<ViewModel> result; if (isDestinationSite) {

我正在使用下面的代码获取状态。我发现错误方法“System.String GetStateint32”不支持到SQL的转换。请告诉我哪里出错

    public IQueryable<ViewModel> GetResult()
            {
                IQueryable<ViewModel> result;

                if (isDestinationSite)
                {
                    result = (from table1 in this.db.tblTable1      
                              select new ViewModel
                              {
                                 State= this.GetState(table1.PersonUID),                                
                              });
                }

   private string GetState(int PersonUID)
        {
            using ( PersonPref pref = new PersonPref ())
            {
                pref .selectPref(ApplicationCode.MyApp,                                                  PersonPref .preference);
                if (pref.PesronValue== "True")
                {

                    return "Successfull";
                }
                else
                {
                    return "Failure";
                }
            }            
        }

SQL对您的函数一无所知,所以您只需要将它移到linq查询之外

List<ViewModel> result;

var personUID = (from table1 in this.db.tblTable1 select table1.PersonUID).ToList();

foreach (var id in personUID)
{
    result.Add(new ViewModel { State = GetState(id) });
}

您可以使用AsEnumerable编写迭代查询,然后执行如下选择:

  result = (from table1 in this.db.tblTable1      
            .AsEnumerable()
              select new ViewModel
              {
                 State= this.GetState(table1.PersonUID),                                
              });

旁注:一组令人惊讶的标记-错误看起来像是从LINQ到SQL,但标记明确表示不是这样。。。考虑编辑。错误消息似乎很自我解释。LINQ查询提供程序无法将该方法转换为SQL…很好的解释/很好地展示了修复的想法。请考虑编辑结果。状态= GETStReReSurt.状态;进入接近有效C的部分-结果是{int State}的可枚举项,并且实际上没有result.State。@AlexeiLevenkov yep我意识到,一旦我发布,我认为现在很好,如果我遗漏了什么,请告诉我。看起来还可以。请注意,由于必须运行查询客户端才能转换为ViewModel集合,因此您确实无法通过这种方式获得真正的IQueryable,这可能是一个好主意……请注意:可能有许多类似的问题已经在搜索中给出了一些-因此避免在这一问题上花费太多时间: