C# Linq到实体的内联委托

C# Linq到实体的内联委托,c#,linq-to-entities,expression-trees,C#,Linq To Entities,Expression Trees,我觉得我已经知道这个问题的答案了 我有一个常见但复杂的表达式,我想在多个位置重复使用代码。我想使用一个返回Func的函数,其中包含一些代码: public static Func<MyClass, bool> GetCheck() { return (x) => x.Value > 10; } public static Func GetCheck() { 返回值(x)=>x.值>10; } 看起来很容易。我遇到的问题是,当我将它应用到LINQ中使用的LINQ

我觉得我已经知道这个问题的答案了

我有一个常见但复杂的表达式,我想在多个位置重复使用代码。我想使用一个返回Func的函数,其中包含一些代码:

public static Func<MyClass, bool> GetCheck()
{
    return (x) => x.Value > 10;
}
public static Func GetCheck()
{
返回值(x)=>x.值>10;
}
看起来很容易。我遇到的问题是,当我将它应用到LINQ中使用的LINQ表达式到实体时。我得到一个错误,表示不支持调用。我明白为什么。我不知道的是,有没有什么办法可以让我摆脱这一切。我想说

var check = GetCheck();
IQueryable<MyClass> results = MyClasses.Where(y => check(y));
var check=GetCheck();
IQueryable results=MyClass,其中(y=>check(y));
。。。让表达式树检查器认识到,Func中发生的一切在linqto实体和DB中都是完全合法的。看起来它应该是内联的


我能做些什么来实现这一点吗?代理的任何形式的声明是否允许此操作?

由于您正在查询
iQuery表
,因此您应该尝试以下操作:

public static Expression<Func<MyClass, bool>> GetCheck()
{
    return (x) => x.Value > 10;
}
公共静态表达式GetCheck()
{
返回值(x)=>x.值>10;
}

没错,只是它被用作更大谓词的一部分,我还没有找到混合表达式的方法&LINQ:
IQueryable results=MyClasses.Where(y=>check(y)&&y.OtherValue<3)尝试这样做:
IQueryable results=MyClasses.Where(检查)。Where(y=>y.OtherValue<3)我应该说谓词是复杂的,它被插入到另一个复杂谓词中。也就是说:
IQueryable result=posts.Where(p=>p.RootPost.CreatorId==requesterId | | p.RootPost.Tags.OfType().Any(t=>streamTopics.Contains(t.Topic)|(t.Topic)&&p.RootPost.Cases.Any(c=>c.Followers.Any(x=>x.Id==person.FirstOrDefault().Id())