C# 方法“System.String GetState(int32)”不支持到SQL的转换
我正在使用下面的代码获取状态。我发现错误方法“System.String GetStateint32”不支持到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) {
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,这可能是一个好主意……请注意:可能有许多类似的问题已经在搜索中给出了一些-因此避免在这一问题上花费太多时间: