Tag: linq

结合两个Linq lambda表达式

Expression<Func> fn1 = x => x.PossibleSubPath.MyStringProperty; Expression<Func> fn2 = x => x.Contains(“some literal”); 有没有办法创建一个新的lambda表达式,它基本上使用fn1的输出并将其用作fn2的输入? Expression<Func> fnCombined = … 我知道我可以立即创建这个函数,但问题是我正在制作一些通用代码,因此真的需要能够分别创建这两个函数,然后将它们组合在一起,以便Linq可以使用它们我的数据库对象(entity framework)。

如何使用reflection调用扩展方法?

我很感激之前已经提出了类似的问题,但我正在努力调用以下代码中的Linq Where方法。 我希望使用reflection动态调用此方法,并动态构建Where子句中使用的委托(或lambda)。 这是一个简短的代码示例,一旦工作,将有助于形成我正在构建的解释DSL的一部分。 干杯。 public static void CallWhereMethod() { List myObjects = new List(){new MyObject{Name=”Jon Simpson”}}; System.Delegate NameEquals = BuildEqFuncFor(“Name”, “Jon Simpson”); object[] atts = new object[1] ; atts[0] = NameEquals; var ret = typeof(List).InvokeMember(“Where”, BindingFlags.InvokeMethod, null, InstanceList,atts); } public static Func BuildEqFuncFor(string prop, object val) { return t => t.GetType().InvokeMember(prop,BindingFlags.GetProperty, null,t,null) == val; […]

为什么不包含有什么影响?

我正在做以下LINQ查询,但它不会返回导航属性Person填充,我得到null 。 public IEnumerable GetSharePeopeByCarId(int carId) { return from q in _context.Cars join s in _context.Shares on q.CarId equals s.Car.CarId join p in _context.SharePeople.Include(p => p.Person) on s.ShareId equals p.ShareId where q.CarId == carId select p; } 我不知道为什么,因为当我使用像_context.SharePeople.Include(p => p.Person)这样的常规扩展方法时,它可以工作。