gpt4 book ai didi

c# - 需要帮助来使用表达式树构建 LINQ 查询

转载 作者:行者123 更新时间:2023-11-30 17:59:59 24 4
gpt4 key购买 nike

我需要为看起来像这样的 LINQ 查询构建一个表达式树:

collection.OrderBy(e => ((MyObject)e["PropertyIndex"]).dictionary.Where(k => k.Key == "keyName").Select(k => k.Value).Single());

我看了this link这解释了如何链接 OrderBy 方法。我不知道如何使用表达式树在 OrderBy 中添加 Where。

更新:

我需要对内存中的数据进行动态排序。所以 linq 查询可能看起来像这样:

collection.OrederBy(field1).ThenByDescending(field2).ThenBy(field3)

我只在运行时知道我需要根据多少字段进行排序。任何一个 fieldX 都可以是一个复杂的对象。对象的类型当然会在运行时知道。其中一个对象的结构类似于您在上面的 LINQ 查询中看到的结构。它有一本字典,我必须对特定的键进行排序。在我的例子中,字典包含本地化数据,例如:

{{"en-US", "word (en)"}, {"es-ES", "word (es)"} , ....}

我需要按特定语言排序。

最佳答案

看来您的查询是这样做的:

from k in collection
where k.Key == "keyName"
orderby ((MyObject)k)["PropertyIndex"]
select k.Value

您还可以像这样添加更多的 where 子句:

from k in collection
where k.Key == "keyName"
&& k.OtherProperty == OtherValue
orderby ((MyObject)k)["PropertyIndex"]
select k.Value

编辑:根据明确的要求,我建议您首先执行所有 where 子句(无需对您将忽略的数据进行排序),然后应用所有 .OrderBy()。如果您可以使它们成为 lambda,那比您建议的链接(双关语意)要容易得多:

.OrderBy( e => e.Property1 ).OrderBy( e => e.Property2 )

如果您想“动态地”形成这些,请执行以下操作:

var query = (from k in collection select k);
query = query.Where( e => e.Property1 == "value" );
var orderedQuery = query.OrderBy( e => e.Property1 );
orderedQuery = query.Orderby( e => e.Property2 );
var result = orderedQuery.Select( e => e.Value ).Single();

在这些事情周围撒上一些条件,你就会成功。请注意,查询的类型为 IQueriable<T> orderedQuery 的类型是 IOrderedQueriable<T> ,这就是为什么你不能(不强制转换)重用相同的变量。

关于c# - 需要帮助来使用表达式树构建 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com