问题标签 [linq-expressions]

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 投票
2 回答
2942 浏览

c# - 如何使用 EF 将 Lambda 表达式作为方法参数传递

如何将 EF 表达式作为方法参数传递?

为了说明我的问题,我创建了一个伪代码示例:

第一个例子是我今天的方法。该示例使用 EF 和 Fancy Retry Logic。我需要做的是封装 Fancy Retry Logic 使其变得更通用且不重复。

在第二个示例中,我希望它是这样的,它带有一个接受 EF 表达式作为参数的辅助方法。

这对 SQL 来说是一件微不足道的事情,但我想用 EF 来做,这样我就可以从强类型对象中受益。

第一个例子:

第二个例子:

0 投票
3 回答
5516 浏览

c# - 使用表达式> 在 Linq 中包含扩展

使用下面的示例,我想Expression在我的 Contains 方法中使用我的方法,让它使用EF.

我怎样才能建立这个正常工作?

我知道我可以传递整个谓词,但我只希望用户提供如何从相关实体解析公司。

更新

我已决定解析 companyId 而不是整个公司实体,我可以获取内存中的 id 列表,如果这是 IQueryable 或只是一个普通数组/IEnumerable,我不会大惊小怪

但是我得到了一些奇怪的错误:

' Extent.Select(o => o).Where(p => (p.Hide = False)).Where(p => (p.Archived = False)).Where(item = > System.Int32[].Contains(item.Development.CompanyId))'。有关更多详细信息,请参阅 InnerException。

内部异常是

参数表达式无效

更新 2

我已经编辑了代码以反映我真正想做的事情,但在找到解决方案时运气不佳。

0 投票
4 回答
5522 浏览

c# - 如何按多个通用 linq 表达式分组

我正在尝试使用 Linq 表达式来构造查询,并且试图按多列进行分组。假设我有一个基本集合:

我知道您可以使用 lambda 表达式对它们进行分组:

如您所见,此分组正确:

但是现在,假设我收到一组要分组的选择器,它作为我的方法中的参数传递给我,并且实体类型是通用的:

调用该方法的人会这样调用:

我将如何构建 group-by 表达式?

编辑

我在上面进行了更新,希望能阐明为什么我需要这组选择器。

编辑#2

使doLinq中的实体类型成为通用的。

0 投票
2 回答
35055 浏览

c# - 如何在 EF 4.3 中使用带有复杂键的 AddOrUpdate 播种数据

我正在尝试使用一些测试数据为开发数据库播种。

我已经使用context.People.AddOrUpdate(p => p.Id, people));了很多成功。

我有另一个需要播种的表,其中我不知道主键。

例如,我想根据名字和姓氏匹配来添加或更新。

我不确定如何正确编写表达式。

显然是不正确的,但我希望它传达了我正在寻找的解决方案。

0 投票
1 回答
1638 浏览

entity-framework - 与 Lambda 表达式作斗争(VB .net)

我有一个相对简单的事情,我可以在 SQL 中轻松完成,但我正在尝试习惯使用 Lambda 表达式,并且很难。

这是一个简单的例子。基本上我有2张桌子。

  • tblAction (ActionID, ActionName)
  • tblAudit(AuditID、ActionID、已删除)

tblAudit 可能有一个关于 tblAction 的条目,其中 Deleted 标志设置为 1。

我要做的就是选择我们在 tblAudit 中没有已删除条目的操作。所以SQL语句是:

VB.Net 的 LINQ 中的上述内容是什么?我试过了:

但这实际上是一个内部连接类型的场景,它要求 tblAction 中的每个条目在 tblAudit 中也有一个条目。我正在使用 Entity Framework Code First 来进行数据库映射。有没有办法以可以做到这一点的方式定义映射?

0 投票
1 回答
626 浏览

.net - 通过 linq 表达式从被覆盖的属性中获取属性

我正在尝试使用GetCustomAttributes()来获取在属性上定义的属性。问题是该属性是一个被覆盖的属性,我无法弄清楚如何从表达式中提取被覆盖的属性。我只能弄清楚如何获得基类的。

这是一些代码

现在我正试图MyAttribute摆脱抽象类。但我需要通过Expression. 这是我一直在使用的:

不幸的是atts,最终是空的。问题是menberType最终是 forText.Content而不是Abstract.Content类。所以当我得到属性时,它什么也不返回。

0 投票
0 回答
237 浏览

java - 类似 Linq 的 Java 表达式库,能够将表达式树编译为可执行的 JVM 字节码

System.Linq.Expressions 命名空间包含大量用于 .Net 语言中的所有构造的 Expression 类。您可以使用这些类的对象构建表达式树,然后可以即时编译和执行。

在 Java 世界中是否有类似的东西,我可以在其中构建表达式树,即时编译它们,然后执行它们?

只是给你一个非常简单的例子,我需要一个库来允许我写这样的东西:

谢谢

只是一个更新。找到了这个库,它符合我的想法:http ://unkrig.de/w/janino 。

0 投票
1 回答
3601 浏览

c# - 将 LINQ 表达式传递给另一个 QueryProvider

我有一个简单的自定义 QueryProvider,它接受一个表达式,将其转换为 SQL 并查询一个 sql 数据库。

我想在 QueryProvider 中创建一个小型缓存,用于存储经常访问的对象,这样就可以在没有数据库命中的情况下进行检索。

QueryProvider 有方法

缓存作为这个 QueryProvider 类中的一个字段,是一个简单的通用列表。

如果我使用 List.AsQueryable 方法并将上述表达式传递给 List.AsQueryable 的 Provider 的 Execute 方法,它就不能按预期工作。看起来当一个表达式被编译时,初始的 QueryProvider 成为一个不可或缺的部分。

是否可以将表达式传递给后续的 QueryProvider 并根据需要执行表达式?

调用代码看起来模糊如下:

它不会返回错误,而是卡在循环中,一遍又一遍地调用同一个提供程序。

这是更多代码,显示了我正在尝试做的事情:

收藏:

询问:

查询提供者:

迭代器:

程序:

长颈鹿:

特殊情况,例如 SingleAndDefault 等被忽略。我想要工作的部分发生在迭代器中,它首先在执行字典之前执行列表的查询提供程序。

两个 Queryable 对象之一可能是数据库或其他对象。

0 投票
2 回答
235 浏览

c# - 使用 LINQ 根据特定条件在列表中查找列表项的位置

类似于linq find in which position is my object in List,除了他接受的答案是在对象级别进行评估。

说我有

现在我有一个IFoo这样的列表集合:

Foos我想编写一个基于属性值和/或值(例如,textnumber在这种情况下)带回索引的方法,以便我可以执行以下操作:

我该怎么写?

0 投票
1 回答
1691 浏览

c# - 在 C# 表达式树中可靠地检测编译器生成的类

我正在按照 Linq-to-SQL 的方式构建一个 C# 表达式到 Javascript 转换器,但是我遇到了编译器生成的表达式树的问题。

我遇到的特殊问题是处理MemberExpression编译器生成的值,但CompilerGeneratedAttribute它们的类型没有指定。

这是我一直在尝试的精简版:

现在,我打开了一个 Visual Studio 调试会话,我发现它(在即时窗口中运行):

所以我这里有一个明显的编译器生成的类,没有自定义属性,因此没有CompilerGeneratedAttribute!因此,我的代码do other stuffdo stuff.

如果有人可以在这里帮助我,我将不胜感激。如果可能的话,我真的宁愿不做任何肮脏的expressionType.Name事情,比如将<>.*__DisplayClass.