问题标签 [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# - Linq 表达式如何确定相等性?
我正在考虑使用 Linq 表达式作为字典中的键。但是,我担心我会得到奇怪的结果,因为我不知道 Linq 表达式如何确定 Equality。
从 Expression 派生的类是否比较值相等或引用相等?或者换句话说,
c# - 如何动态创建表达式> 来自表达式的谓词>?
我试图追加 where 谓词,我的目标是创建与以下相同的表达式:
我有以下代码:
这将创建以下输出:
但是,这是错误的,因为Name和Namespace的参数不一样。如果我将表达式选择器之一更改为:
输出将是:
如何使用sel1和sel2创建有效的表达式?
更新(2011 年 2 月 28 日)
我通过创建调用表达式解决了这个问题:Expression.Invoke
所以 lambda 表达式 sel1 和 sel2 不需要是 MemberExpression:
vb.net - In Query 的 Linq 表达式链语法
我有一个似乎无法在表达式方法链语法中复制的查询。我有两个表“用户”和“用户付款”。User 和 UserPayment 具有一对多的关系,即一个用户可以有多个 UserPayment。
只是想知道获取所有在特定日期付款的用户的语法是什么?或者甚至获得所有已付款的用户?
还要注意我是用 VB 编写的。
谢谢
c# - 动态 LINQ - 是否有 .NET 4 版本?
我希望将 LINQ 用于一些搜索例程,并希望有一些动态的 where 子句。因此,例如,如果用户想要按城市搜索或按州搜索,我将使用动态 LINQ Where<> 调用,而不是创建两个强类型 LINQ 表达式,然后根据用户想要搜索的方式使用适当的表达式.
所以我想这样做:
代替
personData.Where(p => p.City=="Pittsburgh");
或者
personData.Where(p => p.State=="PA");
我遇到了Scott Guthrie 的一篇博文,其中谈到了 Visual Studio 2008 示例中的动态 LINQ。这似乎符合我的要求,但我的问题是:
- Microsoft 是否支持此示例库?
- Scott Guthrie 的文章是关于 VS2008 (.NET 3.5) 的。.NET 4 有更好的选择吗?也许与 .NET 4 一起发布的东西可以完成同样的事情(或非常接近的事情)?
提前致谢!
c# - 我们可以从 linq 表达式中删除子句吗?
我想知道是否可以从 linq 表达式/查询运算符中添加/删除 where 子句。
例如:-
是否可以在后期删除 where 表达式?
提前致谢 :)
c# - 如何记录谓词表达式?
通常,我的存储库具有用于调试目的的日志记录语句,允许我查看参数值。最近,我走上了创建一个通用存储库的道路,该存储库将谓词表达式作为参数以获得极大的灵活性,但是我无法找到一种体面的方法将条件记录到远程有用的地方。
示例方法:
您可以看到我此时正在使用 Body.ToString(),但结果不那么易读:
Parameters [predicate: (fa.SomeId == value(NameSpace.SomeClass+<>c__DisplayClass2).SomeId)]
最终,我希望看到类似于以下内容:
Parameters [predicate: (fa.SomeId == 1 && fa.Account.Name == "MyName").SomeId)]
本质上,该日志的价值在于能够在发生故障时知道输入值。有什么办法可以绕过强制 API 的用户将谓词作为字符串提供?
performance - 设置类的私有属性
我有一些非常古老的代码,它使用反射来设置对象的属性,例如:
我正在考虑替换该代码以使其更快。但是因为上面的代码还允许设置对象的私有属性,所以我不确定还有哪些其他选项存在。
问题:
- 我是否正确,编译表达式(使用 System.Linq.Expressions)和生成的代码(使用 CodeDom / Microsoft.CSharp.CSharpCodeProvider)不能用于设置私有属性?
- 使用 Reflection.Emit 有可能吗?
- 任何映射库(AutoMapper,ValueInjecter)都会对此有所帮助(我不知道他们在内部使用什么技术)?
- 还有其他选择吗?
c# - 如何在不编译的情况下从现有 LambdaExpression 构建 LambdaExpression
我想组合两个 LambdaExpressions 而不编译它们。
如果我编译它们,这就是它的样子:
这显然不是从提供的参数中获取目标表达式的最快方法。此外,它与不支持 C# 方法调用的查询提供程序(如 LINQ to SQL)不兼容。
从我读过的内容来看,最好的方法似乎是建立一个ExpressionVisitor
类。但是,这似乎是一项非常常见的任务。有谁知道提供这种功能的现有开源代码库?ExpressionVisitor
如果不是,那么使其尽可能通用的最佳方法是什么?
c# - 函数是怎样的隐式转换为表达式>?
我不明白这里发生了什么:
这两行都编译:
但这不会:
没有隐式运算符 on LambdaExpression
orExpression<TDelegate>
将委托转换为表达式,因此必须发生其他事情才能使赋值起作用。它是什么?
entity-framework-4.1 - 实体框架使用 CompiledQuery 但允许运行时过滤器值
我正在尝试使用实体框架重构繁琐的 LINQ-to-SQL 数据层。模型背后的数据库架构很大,一个典型的查询可能有 20 到 30 个包含。EF 会为此类查询生成大量 SQL 语句,迄今为止最大的是 4k 行,但它们仍然可以及时执行,所以这不是问题。
问题是 EF 需要很长时间,最多需要 4 或 5 秒来生成查询。为了克服这个问题,我使用了 CompileQuery。那么问题是现有的 L2S 数据层有很多过滤器可以根据用户输入应用于查询。这些过滤器中的单个值需要在运行时设置。
下面的代码不起作用,因为初始静态值被编译到查询中,但它演示了我正在尝试做的事情。
有什么方法可以在编译的查询中包含我的过滤器表达式,并且能够在执行查询时在过滤器表达式上设置值?