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

c# - 用于匹配复杂多对多关系的 Linq 表达式

假设我有两个实体:

(我们认为这些动物可以吃任何不含它们不能吃的东西的东西。)现在给定一种特定的食物,我想找出我可以喂给哪些动物,并且给定一种特定的动物,我想知道我可以喂它什么。

相反的表达式看起来非常相似:

所以真正有意义的是一个组合表达式:

不知何故,上面的两种方法,GetAllowedFoods应该GetAllowedAnimals调用表达式IsAllowedDiet

我认为这是LinqKit应该能够立即完成的事情,但作为 LinqKit 的初学者,我不知道正确的语法是什么!

0 投票
1 回答
156 浏览

asp.net-mvc - 如何将 db 对象和模型对象传递给函数

我想把它变成一个函数。我将传递 db 对象和 MVC 模型对象。这是原始代码:

我想要这样的功能

0 投票
1 回答
265 浏览

c# - 带有变量比较器的复合表达式?

我正在编写一个查询框架,并试图使其尽可能通用。

假设我有一个基于人员的查询,并且我希望能够过滤名字和姓氏,并且在这两种情况下我都希望能够使用过滤条件,例如StartsWith, ' EndsWith, Contains, Equals

所以现在我有一个方法:

现在,我还希望能够为 LastName 构建相同的过滤器。重新复制和粘贴整个内容似乎很愚蠢和浪费,只需替换p.FirstNamep.LastName. 我还有一堆我想过滤的其他字符串字段,我真的不想为每个字段重写整个方法!

有没有办法抽象这个,也许使用LinqKit,这样我就可以提出一个更通用的方法,具有以下近似签名:

这样我就可以在里面FirstNameFilter像这样调用它:

0 投票
2 回答
2555 浏览

c# - 使用 LINQkit 在 LINQ to Entities Select 中调用表达式

这就是我想要做的:

更新 :

myExpression必须与我的查询分开,因为我想在多个 LINQ 查询中重用它。

更新 2:

分开myExpressionmyExpression1明确myExpression2我想单独重用它们的事实。

更新 3:

将 LINQkit 添加到示例中。

问题 1抛出:无法将类型为“System.Linq.Expressions.FieldExpression”的对象转换为类型“System.Linq.Expressions.LambdaExpression”。

问题 2引发:内部 .NET Framework 数据提供程序错误 1025。

0 投票
1 回答
597 浏览

c# - 使用 LinqKit 的动态查询太慢了!在这种情况下,存储过程可以更好吗?

我正在使用 LinqKit 使用动态生成的过滤器构建查询。

该查询从数据库中获取一个相当大的对象图以执行计算并对该数据进行一些其他修改。只要我不在Includes查询中使用,从数据库中获取我需要的主要实体并不需要很长时间。但是,不幸的是,我需要它的许多相关实体来执行所需的计算。

每次我添加一个Include,这都会转化为 SQL 中的一个新的嵌套子查询。我有大约 8 或 9 个Inlcudes,所以这转化为很多嵌套的子查询。该查询需要永远返回数据。

我希望所有这些嵌套的子查询从 SQL 中消失,但是按照我想要从应用程序端使用 LinqKit 的方式来塑造 SQL 有点困难。

我认为,对于这种特定情况,最好按照我希望 SQL 的方式编写存储过程,然后从实体框架中调用它。

我的问题是我不知道如何使用存储过程在应用程序端获取对象图。我可以让 EF 生成一个ComplexType将所有数据包含在单个“实体”中的数据,但是执行计算的代码等待特定的实体对象图(主要实体及其相关实体),因此代码不知道那ComplexType是什么。我真的不想重写计算引擎来使用它ComplexType。我可以将结果映射到单个实体,但只会返回实体。我也希望返回相关实体。

看起来我被夹在一块石头和一个疯狂的地方之间。

任何人都可以提出任何建议吗?

0 投票
4 回答
7072 浏览

c# - 使用通用 LINQ 表达式调用包含方法的忽略大小写

我正在为通用过滤器使用下面的代码,任何通过的搜索文本但包含方法是区分大小写的,我该如何编写来忽略大小写。

0 投票
1 回答
1216 浏览

c# - 在动态 linq 查询中调用 linqkit 表达式

我如何称呼这个 LinqKit 表达式

在动态 linq 查询中(使用 Microsoft 的 System.Linq.Dynamic 作为字符串的 Linq)

此表达式在像这样的标准 Linq 查询中运行良好

但是当我尝试从动态 linq 查询中调用它时,我收到一条错误消息“'Expression`1' 类型中不存在适用的方法 'Invoke' 我试图在文件 System.Linq.Dynamic 中添加 linqkit 导入,但它仍然无法正常工作。

我希望能够做这样的事情

谢谢您的帮助

0 投票
2 回答
790 浏览

c# - Dynamically Append LINQ Join

I have a method in my data layer in which I pass in a set of search parameters, dynamically build up the required 'where' clause using the PredicateBuilder class from LINQKit and then execute the LINQ query to return a list of objects.

In some cases the search criteria may contain a category name which doesn't exist in the Library table, I then need to join to this table to perform the necessary query. The reason it's been done this way is because there are potentially hundreds of categories per book and for optimisation reasons I only want the join to be performed if actually required.

Now my question is, is it possible to dynamically append this join to the LINQ query?

After a few attempts at trying to get this to work I've unfortunately had to resort to the 'cut-and-paste' pattern which I dislike immensely but needed something that worked for it to get 'out-the-door'.

The code below is an extract with variables renamed of what I've currently got (i.e. this isn't really a library application!):

I've had to create the sample code in Notepad++ and because it's a contrived example I haven't been able to check if it compiles. Should do though (I hope!).

0 投票
1 回答
2063 浏览

linq - 具有日期时间字符串比较的谓词生成器

我刚开始使用 linq 套件,我认为它很棒,但我有 2 个问题

我有这个项目集合,可以通过几个条件 a、b、c、d、e(不重要)和 someDate(日期时间)过滤

所以我有一个这样的谓词

但是当我尝试使用

因为我没有使用特定日期进行比较,而是使用不完整的字符串,例如 8/1 或 08/01,可能只是 8 或可能只是年份,所以我无法在日期之间进行操作。

并抛出此错误。

我从这个链接中得到,这是因为 linq to entity 无法将日期时间解析为字符串,因为如果不同的文化设置。

即使我使用 ToString("d") 我也不愿意重新开始做这一切。

所以问题是

有谁知道让谓词构建器与 date.tostring().contains() 一起工作的方法????

0 投票
2 回答
1793 浏览

linq - LINQKit:在 LINQ to Entities 中嵌套 ExpandableQuery

我一直在尝试将LINQKit合并到共享数据访问层中,但是遇到了障碍。使用 构造嵌套查询时ExpandableQuery,表达式解析器无法正确解包ExpandableQuery并构造有效的 SQL 查询。抛出的错误如下:

System.NotSupportedException:无法创建“Store”类型的常量值。此上下文仅支持原始类型或枚举类型。

通过下面的示例程序,我们可以很容易地重构这个问题,并且它显然与AsExpandable()对 `table.

当您删除AsExpandable()调用时,生成的 SQL 就是您期望执行三角连接的内容:

但是,当您包含 时AsExpandable(),实体框架会将整个存储表拉入内存,然后失败并出现“无法创建常量”错误。

是否有任何已知的解决方法可以强制 LINQKitExpandableQuery在表达式解析器中展开并评估嵌套子查询?