问题标签 [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 回答
1309 浏览

c# - 使用 LinqKit 使用子查询构建谓词

我正在尝试研究如何使用引用父查询的子查询来构建谓词。

例子:

我有 2 节课(当然是 Foo 和 Bar)。

Bar 的 ReferenceId 指的是(在此特定情况下)Foo 的 Id。

我有一个数据库上下文。

我想使用谓词构建器(如果可能)来创建这样的函数......它检查是否存在带有 Foo 的 Id 的 Bar。

我没有 Bar 作为导航属性,所以我需要直接访问上下文。

我发现了这个,(我认为)与我想要的相似,但不一样。

Entity Framework Code First 4.3 / LINQKit 相关表谓词

我写了这个

但我收到错误消息:参数“f”未绑定在指定的 LINQ to Entities 查询表达式中。

如果我删除 A 行或 B 行,它将执行错误。对于他们两个,它都会引发异常。

谁能提供一些关于我应该做些什么来实现这一目标的意见?

谢谢

0 投票
1 回答
935 浏览

c# - 添加到 Lambda 表达式并使用实体框架

如果我想用下面已经存在的 lambda 树表达式检索更多列,我该怎么做?这适用于实体框架并希望它仍然有效。

0 投票
0 回答
166 浏览

c# - 参数未绑定在指定的 LINQ to Entities 查询表达式中

我目前正在努力使用LINQKit.

对于我的特定实体User,我定义了以下属性:

这我通常会在 linq 中使用,就像Select(u => new {Count = User.CountFromView.Invoke(u, ctx)}完全可以找到的那样。然而,构建查询比我在这里写的要复杂。

我有一个静态助手,它根据给定的配置构建查询(指示应该从数据库中选择/查询什么以及如何查询)。

ContextParameter在基类中定义如下:

当我运行应用程序并让我显示它显示的查询时

这似乎完全没问题。不幸的是我得到了例外

参数“context”未绑定在指定的 LINQ to Entities 查询表达式中

我不知道为什么会发生这种情况,因为我还有其他这样的属性,我ContextParameter以同样的方式传递给它。注意:我Count()在这里调用结果集。

0 投票
1 回答
8685 浏览

c# - 将 LinqKit PredicateBuilder 用于相关模型(EF Core)

我想使用 LinqKit 的 PredicateBuilder 并将谓词传递.Any给相关模型的方法。

所以我想建立一个谓词:

然后用它来过滤与谓词中的模型有关系的模型:

但这会导致System.NotSupportedException: Could not parse expression 'n.CastInfo.Any(Convert(__castCondition_0, Func``2))': The given arguments did not match the expected arguments: Object of type 'System.Linq.Expressions.UnaryExpression' cannot be converted to type 'System.Linq.Expressions.LambdaExpression'.

我看到了类似的问题和答案,建议使用.Compile. 或者另外一个建立额外谓词的问题。

所以我尝试使用额外的谓词

或者直接使用compile

但我有一个关于编译的错误:System.NotSupportedException: Could not parse expression 'n.CastInfo.Any(__Compile_0)'

那么是否可以将 PredicateBuilder 的结果转换为传递给Any?

注意:我能够构建所需的行为组合表达式,但我不喜欢我需要额外的变量。

所以我想我只是想念一些关于建造者的东西。

版本更新:我使用 dotnet core 2.0 和 LinqKit.Microsoft.EntityFrameworkCore 1.1.10

0 投票
0 回答
741 浏览

c# - LinqKit:AsExpandable 不工作

代码:

运行GetRows给出错误说:

LINQ to Entities 无法识别方法 'System.Linq.IQueryable1[Test.Models.Enum] AsExpandable[Enum](System.Linq.IQueryable1[Test.Models.Enum])' 方法,并且此方法无法转换为存储表达式。

甚至尝试过AsExpandable喜欢db.TableRows.AsExpandable().Select。不工作。

0 投票
1 回答
654 浏览

c# - 用于创建 AND 过滤器的 Lambda 表达式

我使用此代码创建了一个搜索过滤器。

我需要的是传递一个数据数组并通过 AND 过滤这些数据。

进而:

如果我使用 OR 或 OrElse 使用相同的代码,则搜索将正常工作。

但我还需要通过 AND 或 AndAlso 执行搜索,它总是返回零结果。

我已经检查了数据库,并且有 AND 和 OR 结果。

0 投票
1 回答
3531 浏览

c# - 如何对表达式进行单元测试?

我看过一些帖子,例如this,但它没有回答我的问题。

基本上我已经使用 LINQKIT 来构建一个如下所示的表达式:

我有一个看起来像这样的单元测试:

我要做的是检查表达式是否在属性 CID 上执行位置。但是,当测试失败时出现此错误:

Assert.AreEqual 失败。预期:((CompareString(x.CID, value(FSVendor_Refactored.Tests.ManifestFixture+_Closure$__11-0).$VB$Local_filterItem.CID, False) == 0) AndAlso (Convert(x.CID) != null) )>。实际: ((CompareString(x.CID, value(FSVendor_RefactoredRepository.ManifestManager+_Closure$__2-0).$VB$Local_filterItem.CID, False) == 0) AndAlso (Convert(x.CID) != null))> .

我想我理解它为什么会失败,单元测试和 CreateManifestFilters 函数都在不同的项目中。所以我相信这会导致测试失败。

任何人都知道如何检查表达式以检查它是否在 CID 属性上的位置?

编辑:这不是重复的,因为其他答案不使用 PredicateBuilder 因此链接的答案不符合我的要求。

0 投票
2 回答
1553 浏览

c# - 如何组合多个表达式> 放入单个表达式以针对 DbContext 执行?

我正在尝试创建一种方法来允许我的应用程序的用户创建他们自己的数据过滤视图。为此,我正在编写一个键-操作符-值对列表,然后我尝试在多个步骤之后将其解析为一个表达式以用于Where调用。到目前为止,我可以创建表达式,但我不知道如何将它们合并为一个表达式。

有人可以为我指出正确的方向吗?通过在线阅读类似的帖子,我决定尝试使用 LINQKit 来完成PredicateBuilder,但我得到的只是最初的起始谓词。这是我到目前为止的代码,它绝不是最终的,我只是在 LINQPad 中对其进行原型设计:

我也愿意接受有关如何完成此任务或整体改进的其他建议。提前致谢!

0 投票
2 回答
2245 浏览

entity-framework - 实体框架 - LINQ - 在选择中使用表达式

我在我的代码中使用了一些 EF LINQ 表达式来将我的模型的复杂查询保存在一个地方:

然后我可以在查询中使用它们:

并且还在选择中:

我想要实现的是在 select中实际使用相同的表达式/函数,为每一行评估它。

我很高兴这将是一种使用普通 EF 功能或 LINQKit 的方法,但找不到它。

0 投票
1 回答
1281 浏览

c# - 创建一个通用表达式来查询 EntityFramework

我有许多由 EF 针对现有数据库生成的实体。这些实体中的大多数都具有“名称”属性。我想要一个方法,它接受一个针对泛型类型的表达式,并传入一个字符串值,该值最终将与基础实体的 name 属性进行比较。

到目前为止,我有这样的事情:

这里的想法是我可以调用查找函数并传入一个特殊值,以及一个委托,该委托将使用特殊值作为参数在 DbSet 上调用。

我在这里使用 LinkqKit 来尝试完成这项工作,但我收到错误“无法将 FieldExpression 转换为 LambdaExpression”。

我的第一个问题是:有没有更好/更简单的方法来实现这一点?我是不是太复杂了?我什至需要使用 LinqKit 吗?

第二:我怎样才能克服这个错误?