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

sql - 对 EF 中的 where 子句进行空检查

我有一个POCO看起来像的实体

如果ClassOne有一个值ClassTwo将为空,反之亦然,现在当我想运行查询检查每个类的名称属性时,使用linqkit

或者

在这两种情况下,我都会得到ClassOne与术语匹配的结果,但没有匹配的结果ClassTwo

我对正在发生的事情的理解是,当ClassOne为 null 时,查询失败并且不检查ClassTwo. 我不确定如何在不单独运行查询并合并结果的情况下解决此问题。

有人有更好的计划吗?

0 投票
1 回答
306 浏览

c#-4.0 - 代码优先的 LINQKit 谓词

我读过这个(http://www.albahari.com/nutshell/predicatebuilder.aspx

这是我的代码:

我的代码服务首先:

所有记录在T_Users:6548

所有记录在哪里code==357:26

但它总是返回所有记录。但为什么 ?

0 投票
1 回答
385 浏览

c# - 将 LINQ To Entities 与 LINQKit 一起使用时无法强制转换对象异常

我正在使用LINQKit来扩展 LINQ To Entities 功能:

此代码用于实体框架 ORM对象(_Context 是DbContext,Users - 是DBSet

此代码引发以下异常

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

摆脱Func并将IsMatched硬编码为GetAllMatchedUsers解决了这个问题。但我需要使用Func将不同的选择标准从业务逻辑层传递到我的数据访问层

PS IsMatched是高度简化的实现,例如当然

请帮帮我。

0 投票
2 回答
59020 浏览

c# - 如何在 LINQ to Entities 中为实体框架对象使用谓词

我正在为我的数据访问层中的实体框架对象使用 LINQ to Entities。

我的目标是尽可能多地从数据库中过滤,而不将过滤逻辑应用于内存结果。

为此,业务逻辑层将谓词传递给数据访问层。

我是说

所以,如果我直接使用这个谓词,比如

我得到了例外

[System.NotSupportedException] --- {“LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke'。”}

该问题的解决方案建议使用LINQKit库中的 AsExpandable() 方法。

但同样,使用

我得到了例外

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

有没有办法在 LINQ to Entities 查询中使用谓词来查询实体框架对象,以便正确地将其转换为 SQL 语句。

谢谢你。

0 投票
1 回答
5792 浏览

c# - 使用 AsExpandable() 的奇怪 Linq 到实体行为

考虑以下Person实体:

使用以下Expression(使用 构造PredicateBuilder)作为标准:

使用以下语法调用时,生成的 SQL 很好(包括WHERE语句):

但是,当使用这种略有不同的语法调用时,不WHERE涉及SQL,Enumerable.Where而是通过以下方式完成过滤:

有什么想法吗?

0 投票
1 回答
656 浏览

vb.net - VB.NET 的 Linqkit 泛型谓词

我最近遇到了很棒的 Linqkit 库,我想利用 Generic Predicates 创建一个函数,用于将用户映射到他们可以访问的数据,这些数据也可以跨越包含我们的数据映射字段的任何表。(H1L1、H1L2 等)

根据教程(仅限 C#),我发现这确实是可能的,但我被卡住了。

到目前为止,我已经创建了一个界面:

Implements IDataMap 通过添加每个相应的类属性并将其映射到接口,为我想要操作的表调整了 Linq 类 。我可能应该扩展 linq 类,但现在我只是将更改硬编码到 VS 生成的类中。

但我不确定从这里去哪里......或者把这个功能放在哪里,以便可以从我项目中的任何地方访问它。我的测试功能是基本的:

最终我希望能够说类似这样的话:

智能感知让我看到“mapUserToData”可用的唯一方法是,如果我将函数放在我的 Linq 类中......但它不是通用的。如果我将函数内联在我的代码中 intellisense 不会将我的“mapUserToData”函数视为我表上的方法。也许这是因为 C# 和 VB.NET 之间的语言/命名空间差异?

我是 .Net 和 Linq 的新手,所以请提前原谅我。

我可以使用 linqkit 谓词函数在临时基础上成功使用

但是每次我需要它时都无法复制数据映射逻辑。如果有人知道如何提供帮助,我将永远欠他们的债!

0 投票
1 回答
1060 浏览

c# - 如何扩展谓词以外的调用表达式?

我刚刚发现了 LINQKit,并且很高兴它似乎为想要分解复杂 linq 查询的一部分的常见问题提供了解决方案。

但是,所有示例都显示了如何为 where 子句分解谓词

尽管这是一个非常典型的用例,但我还想排除其他类型的表达式,通常用于选择。假设我有以下子表达式:

LINQKit 是否提供了一种扩展对此的调用的方法?我试过了:

这符合,但在运行时在 LINQKit 的扩展器中失败:

堆栈跟踪开始于:

这不支持,还是我做错了什么?

0 投票
1 回答
560 浏览

c# - 使用 EntityFramework 和 LinqKit 查询接口属性

我正在使用 EntityFramework 和LinqKit来构建被翻译成 SQL 的表达式树。我们还使用规范模式来组织我们的查询。

几乎我们所有的领域对象都需要通过描述来执行查询,但在其中一些类中,属性称为“名称”,在其他类中称为“描述”等。

所以最初定义了一个接口如下:

当我尝试使用它在类中显式实现并对此进行通用查询时,问题出现了:

运行时,EntityFramework 无法将属性 get(方法调用)转换为 SQL 表达式。

然后我尝试在类中定义一个表达式,如下所示:

但是当它执行 .Expand() 时会引发异常:无法将类型为“System.Linq.Expressions.PropertyExpression”的对象转换为类型“System.Linq.Expressions.LambdaExpression”。

然后我发现 LinqKit 只支持扩展本地定义的表达式(如本问题所述),并且有一些非官方的代码编写来解决这些问题(本问题的答案)。

但是,当我修改 LinqKit 库以尝试在第二个问题中提出的任一解决方案时,它开始抛出:从范围 '' 引用的 'Foo' 类型的变量 'x',但未定义。

也许这是因为我还没有 Foo 的实例?只有泛型类型参数,这就是为什么我不能在局部变量上定义我的表达式。也许有一种方法可以以某种方式将静态表达式定义为“附加”到类中?但是我将无法在通用查询中使用它,将没有接口......

有一种方法可以修改 LinqKit,以便我可以构建在接口的显式实现上定义的表达式?或者还有另一种方法可以对显式实现的属性进行通用查询?或任何其他解决方案或要研究的事情?

不需要为此使用 LinqKit 或规范模式,但 EntityFramework 是强制性的,重要的是有一个接口/任何其他方式支持“指出”哪个属性是描述属性并在其上制作通用表达式.

先感谢您!

0 投票
2 回答
1615 浏览

c# - 如何避免 Linq 中的“选择 n+1”模式

我有一个形式的查询(包括 LinqKit):

现在我想遍历q...但是由于Countries每个元素的属性都是 type IQueryable,它将被延迟加载,导致执行 n+1 个查询,这不是很好。

编写此查询的正确方法是什么,以便在单个查询中将所有必要的数据提取到数据库?

编辑

嗯,如果我在问这个问题之前实际运行了 Sql 跟踪,那可能会有所帮助。我假设因为内部属性的类型IQueryable是延迟加载的……但是在进行了一些实际测试之后,事实证明 Linq to Entities 足够聪明,可以一次运行整个查询。

很抱歉浪费了你所有的时间。我会删除这个问题,但因为它已经有了答案,所以我不能。也许它可以作为对其他人的某种警告,在假设它是真的之前测试你的假设!

0 投票
1 回答
1087 浏览

c# - 为什么在使用静态字段中的表达式时会收到 InvalidCastException?

我刚开始将LinqKit与 EntityFramework 6.0.2 一起使用,我有以下问题......

为什么会这样:

扔:

但是这个:

工作正常?