问题标签 [linqkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1342 浏览

entity-framework - EF 5.0 是否有 LINQKit 版本?否则我还能为 EF 5.0 使用什么?

在那里,我只看到最新的 LINQKit 版本取决于 EF 6.0.2,我需要在 EF 5.0 上安装,是否有旧的 LINQKit 版本以兼容 EF 5.0?或者其他东西来代替它(.Expand() 功能)?

0 投票
0 回答
37 浏览

c# - 删除其他表mvc3 c#中的现有字段

我有一个删除操作方法,我想在 catch 中添加一个验证错误:我想从表 T_CONSTANTE 中删除一个名为 NOM 的属性,另一个表 Y 在她的名为 FORMULE 的字段中包含该属性我的方法

` 我必须使用 linqkit 来继续 if() 但我不明白如何使用它

0 投票
2 回答
3005 浏览

c# - 从表达式创建动态 Linq 选择子句

假设我定义了以下变量:

现在,我想在 IQueryable 中添加一些动态字段,以便它返回一个IQueryable<ExtendedMyClass>,其中ExtendedMyClass定义为:

换句话说,对于 中的每个值extraFields,我希望有一个值来ExtendedMyClass.ExtraFieldValues表示该表达式对该行的计算结果是否为 True。

我觉得这在动态 Linq 和 LinqKit 中应该是可行的,尽管我以前从未认真使用过。我也愿意接受其他建议,特别是如果这可以在良好的强类型 Linq 中完成。

我正在使用 Linq to Entities,因此查询需要转换为 SQL。

0 投票
2 回答
1443 浏览

c# - 试图在子集合表达式中使用父属性作为参数;LinqKit 抛出“无法将 MethodCallExpressionN 转换为 LambdaExpression”

我正在尝试动态构造一个类似于下面的表达式,我可以在其中使用相同的比较函数,但是可以传入正在比较的值,因为该值是从属性“更高”中传递的询问。

我相信我已经正确构建了查询,但是ExpressionExpander.VisitMethodCall(..)当我尝试使用该方法时会引发以下异常:

“无法将'System.Linq.Expressions.InstanceMethodCallExpressionN'类型的对象转换为'System.Linq.Expressions.LambdaExpression'”

在实际代码中,使用 Entity Framework 和 actual IQueryable<T>,我经常得到:

“也无法将'System.Linq.Expressions.MethodCallExpressionN'类型的对象转换为'System.Linq.Expressions.LambdaExpression'”。

我已经为我的问题构建了一个对 LinqPad 友好的示例,尽可能简单。

如果我做的事情明显错了,我真的很感激朝着正确的方向轻推!谢谢。


编辑:我知道以下方法会起作用:

但是,我试图将比较与参数的位置分开,因为比较可能很复杂,我想将它重新用于许多不同的查询(每个查询的两个参数都有不同的位置)。还打算通过另一个表达式实际计算其中一个参数(在示例中为“最小长度”)。


编辑:对不起,我刚刚意识到,当尝试针对我的示例代码时,一些答案会起作用,因为我的示例只是伪装成一个IQueryable<T>但仍然是一个List<T>底层。我首先使用 LinqKit 的原因是因为IQueryable<T>来自 EntityFramework DbContext 的实际将调用 Linq-to-SQL,因此必须能够由 Linq-to-SQL 本身解析。LinqKit 通过将所有内容扩展为表达式来实现这一点。


解决方案!感谢Jean在下面的回答,我想我已经意识到我哪里出错了。

如果某个值来自查询中的某个位置(即不是事先已知的值),那么您必须将它的引用/表达式/变量构建到表达式中。

在我的原始示例中,我试图传递从表达式中获取的“minLength”值并将其传递给一个方法。该方法调用无法预先完成,因为它使用了表达式中的值,并且无法在表达式中完成,因为您无法在表达式中构建表达式。

那么,如何解决这个问题呢?我选择编写我的表达式,以便可以使用附加参数调用它们。虽然这有一个缺点,即参数不再“命名”,我最终可能会得到一个Expression<Func<int, int, int, int, bool>>或一些东西。

0 投票
1 回答
1147 浏览

vb.net - 无法将 FieldExpression 转换为 LambdaExpression

我编写了以下函数来检查数据库中重叠时间段的添加/修改记录:

调用函数时如下:

我收到以下错误:

InvalidCastException:无法将“System.Linq.Expressions.FieldExpression”类型的对象转换为“System.Linq.Expressions.LambdaExpression”类型。

我没有看到我正在使用任何字段表达式—— ActivistID, FromDate,TillDate都是属性。

我正在使用 EF5 并生成 POCO 类。

我该如何解决这个问题?

更新

如果我criteriaExpr.Expand在 Watch 窗口中输入,则不会出现异常。但是,如果我输入,criteriaExpr.Expand.Compile我会得到同样的异常。

0 投票
1 回答
96 浏览

wcf-data-services - 我们可以将 LINQKIT 与 WCF 数据服务一起使用吗

我在网上找不到任何资源,其中包含将 LINQKIT 与 WCF 数据服务一起使用的示例。可能吗 ?我试图这样做,但它在方法访问中的 ExpressionVisitor 类中失败,错误 - 未处理的表达式类型 10000。

throw new Exception (string.Format ("Unhandled expression type: '{0}'", exp.NodeType));

有没有其他选择。

表达式示例如下所示。它构建成功,但在运行时出现上述错误。

0 投票
1 回答
2878 浏览

c# - 使用 Linq to SQL 将 FieldExpression 转换为 LambdaExpression 时出错

Unable to cast object of type 'System.Linq.Expressions.FieldExpression' to type 'System.Linq.Expressions.LambdaExpression'运行以下代码时出现错误。

此代码的目的是允许我过滤包含某些字符串的记录(实体框架代码优先/Linq to SQL)。

注意:我正在使用第三方库 LinqKit:http ://www.albahari.com/nutshell/predicatebuilder.aspx

...

关于如何重写它以避免上述错误的任何建议?

注意:CodeReview 上的代码也是我与重构相关的原始问题。 https://codereview.stackexchange.com/questions/54888/refactor-c-linq-code-to-reduce-duplication

0 投票
0 回答
187 浏览

c# - LinqKit 子表达式调用很慢

我们有 LinqKit 表达式从 EF 上下文对象返回对象:

DbItemAToFlatItemA 和 DbItemBToFlatItemB 包含许多字段,但是当直接调用它们时,会很快生成 SQL,但是当调用 DbItemCToFlatItemC 时,从 LINQ 生成 SQL 需要很长时间 - 比 DbItemAToFlatItemA 和 DbItemBToFlatItemB 多得多。

生成的 SQL 非常完美,运行速度很快,但我不明白为什么生成它需要这么多时间

有任何想法吗 ?

谢谢你。

0 投票
1 回答
463 浏览

c# - LinqKit Predicate Builder 抛出 TypeLoadException?

我在尝试执行使用 PredicateBuilder 动态构建的查询时遇到问题。

我能够构建查询,但是在执行查询本身时,我得到以下“TypeLoadException”......

运行时: return context.SearchRecords.AsExpandable().Where(predicate).ToList();

无法从程序集“EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.Data.Entity.Infrastructure.IDbAsyncEnumerable`1”。

我已经用这个拉了很长时间了,我已经检查了在线示例等,我似乎做的一切都是正确的,所以我希望这能奏效。

项目使用 .NET Framework 4.5 构建并使用 Entity Framework 6。

提前致谢!

0 投票
1 回答
148 浏览

c# - 将 LINQ 转换为普通的 Foreach

我在我们的一个项目中发现了下面的一段代码。我被困了两天:-(试图理解 Aggregate & LinQKit Expand。

您可以帮助将 LINQ 以下转换为正常的 foreach 操作吗?

或者至少,任何关于这个 LINQ 表达式在列表中所做的事情的指针都会非常有帮助。