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

c# - 如何转换表达式> 到表达式>

有没有办法转换Expression<Func<T, object>>Expression<Func<object, object>>

0 投票
2 回答
158 浏览

linq-to-entities - 基于另一个 LINQ 表达式和值构建特定的 LINQ 表达式

如果我有以下形式的 LINQ 表达式:

有什么办法可以得到下面的表达式?

我需要在 Linq-to-Entities Where 调用中使用第二个表达式。

0 投票
1 回答
787 浏览

optimization - 如何优化 LINQ 表达式?

在使用 .NET 3.5 构建的项目中,我使用 LINQ 表达式在运行时动态生成代码。LINQ 表达式使用 Compile 方法编译并存储以供以后用作 LINQ to 对象的谓词。

表达式有时非常复杂且难以调试。

下面是通过 Visual Studio 中的调试器可视化工具查看的表达式示例。

{request => (Invoke(workEnvelopeHead => (workEnvelopeHead.Method = value(Wombl.Scenarios.CannedResponses+<>c_ DisplayClass58).pipeline), request.WorkEnvelope.Head) 和 Invoke(body => Invoke(value(Wombl.Scenarios) .CannedResponses+<>c _DisplayClass78).isMatch, body.SingleOrDefault()),Convert(request.WorkEnvelope.Body.Any)))}

我希望能够像上面那样优化表达式,以便将value(Wombl.Scenarios.CannedResponses+<>c__DisplayClass58).pipeline表达式替换为变量值的常量。

在这种特殊情况下,value(Wombl.Scenarios.CannedResponses+<>c__DisplayClass58).pipeline是 lambda 中对父作用域中变量的引用。就像是:

优化后的原始表达式应如下所示:

{request => (Invoke(workEnvelopeHead => (workEnvelopeHead.Method = "[My variable's value here]", request.WorkEnvelope.Head) And Invoke(body => > Invoke(value(Wombl.Scenarios.CannedResponses+<>c__DisplayClass78) .isMatch, body.SingleOrDefault()),Convert(request.WorkEnvelope.Body.Any)))}

在编译之前,如何在运行时对 LINQ 表达式进行此类优化?

0 投票
0 回答
556 浏览

c# - 为 linq to 实体创建动态排序方法

可能重复:
动态 LINQ OrderBy

我正在使用实体框架并想创建自己的动态排序方法,让您输入一个字符串来进行排序,例如query.DynamicSort("Name, Age DESC").

我知道 MS 已经发布了一些动态 linq 代码,但这超出了我的需要,我正在尝试了解如何自己编写一个简化版本来进行排序。

我有一些运气让它适用于单个字段......但是当我尝试按多个字段排序时,我收到以下错误:

参数“x”未绑定在指定的 LINQ to Entities 查询表达式中。

这是我的代码。任何人都可以看到我哪里出错并可能提出一些修改吗?我在动态构造表达式方面很弱。

非常感谢。

0 投票
2 回答
5095 浏览

c# - 使用 Expression[] 调用 (params object[])

我试图从 Linq.Expression 树中调用 String.Format 。这是一个简单的例子:

然而,问题是 String.Format 具有以下签名:

我正在尝试传递表达式 []。

现在我可以通过创建一个数组的所有麻烦,用我的表达式的结果填充它,但我真正想要的结果是这样的:

如何通过 Linq 表达式调用 params 函数?

0 投票
3 回答
3079 浏览

c# - 将几个相似的 SELECT 表达式组合成一个表达式

如何将几个相似的 SELECT 表达式组合成一个表达式?

0 投票
1 回答
3892 浏览

c# - LINQ 成员表达式获取列名

你好,

我在 C# 4.0 中使用 LINQ 和 EF。我已将基本的 ELMAH 表拖到 EF 中(多次构建和保存)。一切都按预期工作。

但是试图过于雄心勃勃并且需要一点帮助 - 我试图从作为变量传递的表达式中获取列名。

我想要的是这样的:

传入:x=>x.ErrorId

并得到:“ErrorId”

感谢您的帮助!担。

0 投票
2 回答
1480 浏览

c# - 使用 Linq 表达式的左外连接

我正在尝试使用 Linq 表达式构建左外连接查询,但现在我真的碰壁了。

我想要完成的是以下查询:

我已经定义了以下类:

我创建了没有编译错误的 GroupJoin 表达式。(我在这里省略了一些代码):

但是在 SelectMany 方法中,我试图添加 DefaultIfEmpty 但我得到一个异常说:

类型“System.Linq.Queryable”上没有通用方法“DefaultIfEmpty”与提供的类型参数和参数兼容。如果方法是非泛型的,则不应提供类型参数。

我已经尝试将 typeparams 从 IQueryable 切换到 IEnumerable 并且事件尝试调用 Enumerable.DefaultIfEmpty 但没有运气。也许是 PropertyExpression 有问题?

0 投票
2 回答
2285 浏览

linq - 如何创建表达式集合>?

我有一个使用以下方法的存储库:

我需要传递多个表达式。我正在考虑将签名更改为:

  1. 这可能吗?
  2. 例如,如何创建一个表达式数组以传递给此方法?

目前我正在从我的服务层调用该方法,如下所示:

但我想通过p => p.Variantsp => p.Reviews例如。然后在存储库中,我想遍历表达式并将它们添加到查询中。

有关我为什么这样做的一些背景信息,请参阅 Ben Foster 的博客文章Eager loading with NHibernate

0 投票
2 回答
2835 浏览

linq - Linq to Entities:获取“平均”餐厅评分的复杂查询

所以我正在为我的社区建立一个餐厅评论网站。我需要从下表中提取数据:RESTAURANT、CUISINE、CITY、PRICE 和 RATING(客户评级)。

查询应返回所选 CUISINE_ID 的所有餐厅,并返回 RESTAURANT_NAME、CUSINE_NAME、CUTY_NAME、PRICE_CODE,它应平均所有评论 RATING_CODE 并返回计算值。我可以返回除平均评分之外的所有数据。

我只使用 LINQ to Entities 2 天和 LINQ 大约 3 周,所以我真的是一个新手;我正在等待从 Amazon.com 交付我的 LINQ 书。感谢您的帮助指导!