cod*_*joe 6 c# linq-to-entities
我在lambda语法中有以下linq表达式:
var myValue = 6;
var from = 2;
var to = 8;
var res = MyList.Where(m => m.person.Id == person.Id
&& IsBetween(myValue, from, to))
.Select(x => new Person { blah blah blah })
.ToList());
Run Code Online (Sandbox Code Playgroud)
IsBetween是一个简单的通用助手方法,看看我之间是否有东西:
public bool IsBetween<T>(T element, T start, T end)
{
return Comparer<T>.Default.Compare(element, start) >= 0
&& Comparer<T>.Default.Compare(element, end) <= 0;
}
Run Code Online (Sandbox Code Playgroud)
现在我收到了这个错误,我不知道如何解决它:
LINQ to Entities无法识别方法'Boolean IsBetween [Decimal](System.Decimal,System.Decimal,System.Decimal)'方法,并且此方法无法转换为商店表达式.
Mik*_*bel 12
您无法从LINQ to Entities查询中调用任意方法,因为查询是在SQL数据库引擎中执行的.您只能调用框架可以转换为等效SQL的方法.
如果需要调用任意方法,则调用方法调用的查询运算符将需要在AsEnumerable()运算符之前,以便调用发生在客户端.请注意,通过执行此操作,左侧的所有结果AsEnumerable()都可能会加载到内存中并进行处理.
如果您调用的方法足够短,我只需简单地内联逻辑.在你的情况下,你还需要放弃Comparer电话,而且IsBetween(myValue, from, to)只会变成电话myValue >= from && myValue <= to.
| 归档时间: |
|
| 查看次数: |
7461 次 |
| 最近记录: |