问题标签 [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 投票
3 回答
2250 浏览

c# - Linq 表达式如何确定相等性?

我正在考虑使用 Linq 表达式作为字典中的键。但是,我担心我会得到奇怪的结果,因为我不知道 Linq 表达式如何确定 Equality。

从 Expression 派生的类是否比较值相等或引用相等?或者换句话说,

0 投票
2 回答
60889 浏览

c# - 如何动态创建表达式> 来自表达式的谓词>?

我试图追加 where 谓词,我的目标是创建与以下相同的表达式:

我有以下代码:

这将创建以下输出:

但是,这是错误的,因为NameNamespace的参数不一样。如果我将表达式选择器之一更改为:

输出将是:

如何使用sel1sel2创建有效的表达式?

更新(2011 年 2 月 28 日)

我通过创建调用表达式解决了这个问题:Expression.Invoke所以 lambda 表达式 sel1 和 sel2 不需要是 MemberExpression:

0 投票
1 回答
1096 浏览

vb.net - In Query 的 Linq 表达式链语法

我有一个似乎无法在表达式方法链语法中复制的查询。我有两个表“用户”和“用户付款”。User 和 UserPayment 具有一对多的关系,即一个用户可以有多个 UserPayment。

只是想知道获取所有在特定日期付款的用户的语法是什么?或者甚至获得所有已付款的用户?

还要注意我是用 VB 编写的。

谢谢

0 投票
4 回答
21739 浏览

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。这似乎符合我的要求,但我的问题是:

  1. Microsoft 是否支持此示例库?
  2. Scott Guthrie 的文章是关于 VS2008 (.NET 3.5) 的。.NET 4 有更好的选择吗?也许与 .NET 4 一起发布的东西可以完成同样的事情(或非常接近的事情)?

提前致谢!

0 投票
5 回答
689 浏览

c# - 我们可以从 linq 表达式中删除子句吗?

我想知道是否可以从 linq 表达式/查询运算符中添加/删除 where 子句。

例如:-

是否可以在后期删除 where 表达式?

提前致谢 :)

0 投票
2 回答
2484 浏览

c# - 如何记录谓词表达式?

通常,我的存储库具有用于调试目的的日志记录语句,允许我查看参数值。最近,我走上了创建一个通用存储库的道路,该存储库将谓词表达式作为参数以获得极大的灵活性,但是我无法找到一种体面的方法将条件记录到远程有用的地方。

示例方法:

您可以看到我此时正在使用 Body.ToString(),但结果不那么易读:

Parameters [predicate: (fa.SomeId == value(NameSpace.SomeClass+<>c__DisplayClass2).SomeId)]

最终,我希望看到类似于以下内容:

Parameters [predicate: (fa.SomeId == 1 && fa.Account.Name == "MyName").SomeId)]

本质上,该日志的价值在于能够在发生故障时知道输入值。有什么办法可以绕过强制 API 的用户将谓词作为字符串提供?

0 投票
1 回答
129 浏览

performance - 设置类的私有属性

我有一些非常古老的代码,它使用反射来设置对象的属性,例如:

我正在考虑替换该代码以使其更快。但是因为上面的代码还允许设置对象的私有属性,所以我不确定还有哪些其他选项存在。

问题:

  1. 我是否正确,编译表达式(使用 System.Linq.Expressions)和生成的代码(使用 CodeDom / Microsoft.CSharp.CSharpCodeProvider)不能用于设置私有属性?
  2. 使用 Reflection.Emit 有可能吗?
  3. 任何映射库(AutoMapperValueInjecter)都会对此有所帮助(我不知道他们在内部使用什么技术)?
  4. 还有其他选择吗?
0 投票
1 回答
700 浏览

c# - 如何在不编译的情况下从现有 LambdaExpression 构建 LambdaExpression

我想组合两个 LambdaExpressions 而不编译它们。

如果我编译它们,这就是它的样子:

这显然不是从提供的参数中获取目标表达式的最快方法。此外,它与不支持 C# 方法调用的查询提供程序(如 LINQ to SQL)不兼容。

从我读过的内容来看,最好的方法似乎是建立一个ExpressionVisitor类。但是,这似乎是一项非常常见的任务。有谁知道提供这种功能的现有开源代码库?ExpressionVisitor如果不是,那么使其尽可能通用的最佳方法是什么?

0 投票
1 回答
1209 浏览

c# - 函数是怎样的隐式转换为表达式>?

我不明白这里发生了什么:

这两行都编译:

但这不会:

没有隐式运算符 on LambdaExpressionorExpression<TDelegate>将委托转换为表达式,因此必须发生其他事情才能使赋值起作用。它是什么?

0 投票
2 回答
1441 浏览

entity-framework-4.1 - 实体框架使用 CompiledQuery 但允许运行时过滤器值

我正在尝试使用实体框架重构繁琐的 LINQ-to-SQL 数据层。模型背后的数据库架构很大,一个典型的查询可能有 20 到 30 个包含。EF 会为此类查询生成大量 SQL 语句,迄今为止最大的是 4k 行,但它们仍然可以及时执行,所以这不是问题。

问题是 EF 需要很长时间,最多需要 4 或 5 秒来生成查询。为了克服这个问题,我使用了 CompileQuery。那么问题是现有的 L2S 数据层有很多过滤器可以根据用户输入应用于查询。这些过滤器中的单个值需要在运行时设置。

下面的代码不起作用,因为初始静态值被编译到查询中,但它演示了我正在尝试做的事情。

有什么方法可以在编译的查询中包含我的过滤器表达式,并且能够在执行查询时在过滤器表达式上设置值?