C#LINQ to Entities无法识别方法'Boolean'

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.

  • 你的方法足够短,你可以内联逻辑.我会这样做的.但是,您必须使用等效的关系运算符(`<`,`>`等)替换比较器调用. (2认同)