方法' System.String GetState(int32)'没有受支持的SQL转换

时间:2015-02-27 17:06:27

标签: c# asp.net linq linq-to-entities linq-to-objects

我使用以下代码获取状态。我收到了错误"方法' System.String GetState(int32)'没有支持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";
                }
            }            
        }

2 个答案:

答案 0 :(得分:2)

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) });
}

答案 1 :(得分:0)

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

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