【问题标题】:Composable LINQ Select Clause可组合的 LINQ 选择子句
【发布时间】:2013-11-19 16:19:50
【问题描述】:

有没有办法在之前定义的 LINQ 查询的 select 子句的基础上进行构建?

例如:

var stuffQuery =
    from stuff in MyStuff
    select new {
        stuff.Name
    };
var query2 =
    from stuff in stuffQuery
    join otherStuff in YourStuff on stuff.Name equals otherStuff.Name
    select new {
        stuff.*, // how can I accomplish this?
        YourStuff = new {
            otherStuff.PropertyX
        }
    };

我想要的结果是这样的对象:

string Name
anonymous YourStuff
        string PropertyX

我考虑过使用“Combine”方法将我的两个匿名对象反射性地组合成一个动态对象。但是 Linq-to-Sql 不知道如何处理该方法。

相反,我认为我需要一个返回选择表达式的方法。它的参数将是第一个 Queryable,以及第二个 Queryable 的选择表达式。比如:

var query2 =
    from stuff in stuffQuery
    join otherStuff in YourStuff on stuff.Name equals otherStuff.Name
    GetCombinedSelectClause(stuffQuery, new {
        YourStuff = new {
            otherStuff.PropertyX
        }
    });

我怎样才能做到这一点?我没有嫁给任何特定的语法风格。但是,我不希望使用基于字符串的解决方案(例如 System.Linq.Dynamic)。

【问题讨论】:

  • 您是说不想在 Select 语句中对字段名称进行硬编码?
  • 我想要两个单独的查询。我想将这两个查询合二为一。我希望第一个 select 子句的内容与第二个 select 子句的内容并排放置。

标签: linq anonymous-types


【解决方案1】:

ExpandoObject 怎么样?我相信它可以完全满足您的需求。

【讨论】:

  • 你有机会尝试吗?
【解决方案2】:

我的问题可能不是最好的措辞。但是,我不认为 LINQ 查询旨在实现我所追求的目标。

我要结束这个问题,因为我根本不认为答案是可以实现的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多