问题标签 [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.
c# - 如何使用 EF 将 Lambda 表达式作为方法参数传递
如何将 EF 表达式作为方法参数传递?
为了说明我的问题,我创建了一个伪代码示例:
第一个例子是我今天的方法。该示例使用 EF 和 Fancy Retry Logic。我需要做的是封装 Fancy Retry Logic 使其变得更通用且不重复。
在第二个示例中,我希望它是这样的,它带有一个接受 EF 表达式作为参数的辅助方法。
这对 SQL 来说是一件微不足道的事情,但我想用 EF 来做,这样我就可以从强类型对象中受益。
第一个例子:
第二个例子:
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
我已经编辑了代码以反映我真正想做的事情,但在找到解决方案时运气不佳。
c# - 如何按多个通用 linq 表达式分组
我正在尝试使用 Linq 表达式来构造查询,并且试图按多列进行分组。假设我有一个基本集合:
我知道您可以使用 lambda 表达式对它们进行分组:
如您所见,此分组正确:
但是现在,假设我收到一组要分组的选择器,它作为我的方法中的参数传递给我,并且实体类型是通用的:
调用该方法的人会这样调用:
我将如何构建 group-by 表达式?
编辑
我在上面进行了更新,希望能阐明为什么我需要这组选择器。
编辑#2
使doLinq中的实体类型成为通用的。
c# - 如何在 EF 4.3 中使用带有复杂键的 AddOrUpdate 播种数据
我正在尝试使用一些测试数据为开发数据库播种。
我已经使用context.People.AddOrUpdate(p => p.Id, people));
了很多成功。
我有另一个需要播种的表,其中我不知道主键。
例如,我想根据名字和姓氏匹配来添加或更新。
我不确定如何正确编写表达式。
显然是不正确的,但我希望它传达了我正在寻找的解决方案。
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 来进行数据库映射。有没有办法以可以做到这一点的方式定义映射?
.net - 通过 linq 表达式从被覆盖的属性中获取属性
我正在尝试使用GetCustomAttributes()
来获取在属性上定义的属性。问题是该属性是一个被覆盖的属性,我无法弄清楚如何从表达式中提取被覆盖的属性。我只能弄清楚如何获得基类的。
这是一些代码
现在我正试图MyAttribute
摆脱抽象类。但我需要通过Expression
. 这是我一直在使用的:
不幸的是atts
,最终是空的。问题是menberType
最终是 forText.Content
而不是Abstract.Content
类。所以当我得到属性时,它什么也不返回。
java - 类似 Linq 的 Java 表达式库,能够将表达式树编译为可执行的 JVM 字节码
System.Linq.Expressions 命名空间包含大量用于 .Net 语言中的所有构造的 Expression 类。您可以使用这些类的对象构建表达式树,然后可以即时编译和执行。
在 Java 世界中是否有类似的东西,我可以在其中构建表达式树,即时编译它们,然后执行它们?
只是给你一个非常简单的例子,我需要一个库来允许我写这样的东西:
谢谢
只是一个更新。找到了这个库,它符合我的想法:http ://unkrig.de/w/janino 。
c# - 将 LINQ 表达式传递给另一个 QueryProvider
我有一个简单的自定义 QueryProvider,它接受一个表达式,将其转换为 SQL 并查询一个 sql 数据库。
我想在 QueryProvider 中创建一个小型缓存,用于存储经常访问的对象,这样就可以在没有数据库命中的情况下进行检索。
QueryProvider 有方法
缓存作为这个 QueryProvider 类中的一个字段,是一个简单的通用列表。
如果我使用 List.AsQueryable 方法并将上述表达式传递给 List.AsQueryable 的 Provider 的 Execute 方法,它就不能按预期工作。看起来当一个表达式被编译时,初始的 QueryProvider 成为一个不可或缺的部分。
是否可以将表达式传递给后续的 QueryProvider 并根据需要执行表达式?
调用代码看起来模糊如下:
它不会返回错误,而是卡在循环中,一遍又一遍地调用同一个提供程序。
这是更多代码,显示了我正在尝试做的事情:
收藏:
询问:
查询提供者:
迭代器:
程序:
长颈鹿:
特殊情况,例如 SingleAndDefault 等被忽略。我想要工作的部分发生在迭代器中,它首先在执行字典之前执行列表的查询提供程序。
两个 Queryable 对象之一可能是数据库或其他对象。
c# - 使用 LINQ 根据特定条件在列表中查找列表项的位置
类似于linq find in which position is my object in List,除了他接受的答案是在对象级别进行评估。
说我有
和
现在我有一个IFoo
这样的列表集合:
Foos
我想编写一个基于属性值和/或值(例如,text
或number
在这种情况下)带回索引的方法,以便我可以执行以下操作:
我该怎么写?
c# - 在 C# 表达式树中可靠地检测编译器生成的类
我正在按照 Linq-to-SQL 的方式构建一个 C# 表达式到 Javascript 转换器,但是我遇到了编译器生成的表达式树的问题。
我遇到的特殊问题是处理MemberExpression
编译器生成的值,但CompilerGeneratedAttribute
它们的类型没有指定。
这是我一直在尝试的精简版:
现在,我打开了一个 Visual Studio 调试会话,我发现它(在即时窗口中运行):
所以我这里有一个明显的编译器生成的类,没有自定义属性,因此没有CompilerGeneratedAttribute
!因此,我的代码do other stuff
将do stuff
.
如果有人可以在这里帮助我,我将不胜感激。如果可能的话,我真的宁愿不做任何肮脏的expressionType.Name
事情,比如将<>.*__DisplayClass
.