问题标签 [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.
sql - 对 EF 中的 where 子句进行空检查
我有一个POCO
看起来像的实体
如果ClassOne
有一个值ClassTwo
将为空,反之亦然,现在当我想运行查询检查每个类的名称属性时,使用linqkit
:
或者
在这两种情况下,我都会得到ClassOne
与术语匹配的结果,但没有匹配的结果ClassTwo
。
我对正在发生的事情的理解是,当ClassOne
为 null 时,查询失败并且不检查ClassTwo
. 我不确定如何在不单独运行查询并合并结果的情况下解决此问题。
有人有更好的计划吗?
c#-4.0 - 代码优先的 LINQKit 谓词
我读过这个(http://www.albahari.com/nutshell/predicatebuilder.aspx)
这是我的代码:
我的代码服务首先:
所有记录在T_Users
:6548
所有记录在哪里code==357
:26
但它总是返回所有记录。但为什么 ?
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是高度简化的实现,例如当然
请帮帮我。
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 语句。
谢谢你。
c# - 使用 AsExpandable() 的奇怪 Linq 到实体行为
考虑以下Person
实体:
使用以下Expression
(使用 构造PredicateBuilder
)作为标准:
使用以下语法调用时,生成的 SQL 很好(包括WHERE
语句):
但是,当使用这种略有不同的语法调用时,不WHERE
涉及SQL,Enumerable.Where
而是通过以下方式完成过滤:
有什么想法吗?
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 谓词函数在临时基础上成功使用
但是每次我需要它时都无法复制数据映射逻辑。如果有人知道如何提供帮助,我将永远欠他们的债!
c# - 如何扩展谓词以外的调用表达式?
我刚刚发现了 LINQKit,并且很高兴它似乎为想要分解复杂 linq 查询的一部分的常见问题提供了解决方案。
但是,所有示例都显示了如何为 where 子句分解谓词。
尽管这是一个非常典型的用例,但我还想排除其他类型的表达式,通常用于选择。假设我有以下子表达式:
LINQKit 是否提供了一种扩展对此的调用的方法?我试过了:
这符合,但在运行时在 LINQKit 的扩展器中失败:
堆栈跟踪开始于:
这不支持,还是我做错了什么?
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 是强制性的,重要的是有一个接口/任何其他方式支持“指出”哪个属性是描述属性并在其上制作通用表达式.
先感谢您!
c# - 如何避免 Linq 中的“选择 n+1”模式
我有一个形式的查询(包括 LinqKit):
现在我想遍历q
...但是由于Countries
每个元素的属性都是 type IQueryable
,它将被延迟加载,导致执行 n+1 个查询,这不是很好。
编写此查询的正确方法是什么,以便在单个查询中将所有必要的数据提取到数据库?
编辑
嗯,如果我在问这个问题之前实际运行了 Sql 跟踪,那可能会有所帮助。我假设因为内部属性的类型IQueryable
是延迟加载的……但是在进行了一些实际测试之后,事实证明 Linq to Entities 足够聪明,可以一次运行整个查询。
很抱歉浪费了你所有的时间。我会删除这个问题,但因为它已经有了答案,所以我不能。也许它可以作为对其他人的某种警告,在假设它是真的之前测试你的假设!