Tag: linqkit

如何在Linq到EF中使用Expression <Func >的条件?

关于这个主题已经存在一些问题(例如entity framework中的Expression.Invoke? ),但是,我无法找到适合我具体情况的答案。 我想定义一个这样的方法: public IQueryable GetCustomers(Expression<Func> condition) { return from p in ctx.Customers.AsExpandable() where condition.Compile()(p) select p; } AsExpandable方法来自LinqKit(正如之前提到的线程中所建议的那样)。 但是,当我尝试像他的方式调用我的方法时: var customers = GetCustomers(c => c.ID == 1); 它抛出InvalidCastException: 无法将类型为“System.Linq.Expressions.InstanceMethodCallExpressionN”的对象强制转换为“System.Linq.Expressions.LambdaExpression”。 我究竟做错了什么?

使用LinqKit PredicateBuilder进行相关模型(EF Core)

我想使用LinqKit的PredicateBuilder并将谓词传递给相关模型的.Any方法。 所以我想构建一个谓词: var castCondition = PredicateBuilder.New(true); if (movies != null && movies.Length > 0) { castCondition = castCondition.And(c => movies.Contains(c.MovieId)); } if (roleType > 0) { castCondition = castCondition.And(c => c.RoleId == roleType); } 然后使用它来过滤与谓词中的模型有关的模型: IQueryable result = _context.Name.AsExpandable().Where(n => n.CastInfo.Any(castCondition)); return await result.OrderBy(n => n.Name1).Take(25).ToListAsync(); 但这会导致System.NotSupportedException: Could not parse expression ‘n.CastInfo.Any(Convert(__castCondition_0, Func“2))’: The given […]

使用LINQkit在LINQ to Entities Select中调用Expression

这就是我想要做的: class MyDbContext : DbContext { private static Expression<Func> myExpression1 = x => /* something complicated … */; private static Expression<Func> myExpression2 = x => /* something else complicated … */; public object GetAllData() { return ( from o in MyClassDbSet.AsExpandable() select new { data1 = myExpression1.Invoke(o), // problem 1 data2 = o.Items.Select(myExpression2.Compile()) // problem […]

从表达式创建动态Linq select子句

假设我已经定义了以下变量: IQueryable myQueryable; Dictionary<string, Expression<Func>> extraFields; // the dictionary is keyed by a field name 现在,我想将一些动态字段添加到IQueryable中,以便返回IQueryable ,其中ExtendedMyClass定义为: class ExtendedMyClass { public MyClass MyObject {get; set;} public IEnumerable ExtraFieldValues {get; set;} } class StringAndBool { public string FieldName {get; set;} public bool IsTrue {get; set;} } 换句话说,对于extraFields每个值,我想在ExtendedMyClass.ExtraFieldValues有一个值,表示该表达式是否为该行的计算结果为True。 我有一种感觉,这应该在动态的Linq和LinqKit中可行,尽管我之前从未认真对待过。 我也对其他建议持开放态度,特别是如果这可以通过良好的“powershell型Linq”来完成。 我正在使用Linq to Entities,因此查询需要转换为SQL。

LinqKit的扩展器是否有一个特殊原因无法从字段中获取表达式?

我正在使用LinqKit库,它允许动态组合表达式。 这是编写Entity Framewok数据访问层的纯粹幸福,因为可以选择重复使用和组合多个表达式,这样就可以实现可读和高效的代码。 考虑以下代码: private static readonly Expression<Func> _selectMessageViewExpr = ( Message msg, int requestingUserId ) => new MessageView { MessageID = msg.ID, RequestingUserID = requestingUserId, Body = ( msg.RootMessage == null ) ? msg.Body : msg.RootMessage.Body, Title = ( ( msg.RootMessage == null ) ? msg.Title : msg.RootMessage.Title ) ?? string.Empty }; 我们声明了一个将Message投影到MessageView上的表达式(为了清楚起见,我删除了细节)。 现在,数据访问代码可以使用此表达式来获取单个消息: […]

LinqKit PredicateBuilder返回所有或非行

我开始使用LinqKit的PredicateBuilder来创建具有OR条件的谓词,这是Linq表达式无法实现的。 我面临的问题是,如果我从PredicateBuilder.True()开始PredicateBuilder.True()它返回所有行 ,如果我从PredicateBuilder.False()开始,它返回非行 ,除了我使用的表达式! 看下面的代码: var pre = PredicateBuilder.True(); pre.And(m => m.IsActive == true); using (var db = new TestEntities()) { var list = db.MyEntity.AsExpandable().Where(pre).ToList(); dataGridView1.DataSource = list; } 它应该返回具有IsActive == true的行,但它返回所有行! 我已经尝试了PredicateBuilder.True所有可能组合 PredicateBuilder.False with And | Or方法,不是它们的作品!

如何在entity framework对象的LINQ to Entities中使用谓词

我在我的数据访问层中使用LINQ to Entities for Entity Framework对象。 我的目标是尽可能多地从数据库中过滤,而不将过滤逻辑应用于内存中的结果。 为此,业务逻辑层将谓词传递给数据访问层。 我的意思是 Func 所以,如果我直接使用这个谓词,就像 public IQueryable GetAllMatchedEntities(Func isMatched) { return qry = _Context.MyEntities.Where(x => isMatched(x)); } 我得到了例外 [System.NotSupportedException] — {“LINQ to Entities中不支持LINQ表达式节点类型’Invoke’。”} 该问题的解决方案建议使用LINQKit库中的AsExpandable()方法。 但是,再次使用 public IQueryable GetAllMatchedEntities(Func isMatched) { return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x)); } 我得到了例外 无法将类型为“System.Linq.Expressions.FieldExpression”的对象强制转换为“System.Linq.Expressions.LambdaExpression” 是否有方法在LINQ to Entities查询entity framework对象中使用谓词,以便将其正确转换为SQL语句。 谢谢。

LinqKit System.InvalidCastException在成员属性上调用方法提供的表达式时

给定一个简单的父/子类结构。 我想使用linqkit在父级上应用子lambda表达式。 我还希望Lambda表达式由实用程序方法提供。 public class Foo { public Bar Bar { get; set; } } public class Bar { public string Value { get; set; } public static Expression<Func> GetLambdaX() { return c => c.Value == “A”; } } … Expression<Func> lx = c => Bar.GetLambdaX().Invoke(c.Bar); Console.WriteLine(lx.Expand()); 上面的代码抛出 System.InvalidCastException: Unable to cast object of type […]