在LINQ中为新的匿名对象的属性使用动态“字符串别名”?

时间:2011-07-09 06:28:46

标签: c# linq

我有一个字符串变量myFieldname。如何在linq表达式中将其值用作别名?

收起

string myFieldname = "theName";
var q = (from d in data select new { d.Id, myFieldname = d.Amount });

我希望theName成为别名,而不是myFieldname本身。

2 个答案:

答案 0 :(得分:7)

你不能(至少不能以任何理智的方式)。我能看到的唯一方法是使用expando对象,然后:

foreach(var pair in data select new { d.Id, d.Amount})
{
    var obj = new ExpandoObject();
    IDictionary<string, object> dict = obj;
    dict[myFieldname] = obj.Amount;
    dict["Id"] = d.Id;
    // add obj to a list or similar
}

您可以将ExpandoObjectdynamic API一起使用,但即使这样,我也不清楚这对您有什么帮助...

答案 1 :(得分:6)

你不能 - 很容易 - 因为匿名类型在你的代码中最终成为真正的类型,包括属性名称。

您必须在执行时生成类型,然后为投影创建表达式树。这对我来说听起来像是很多

为什么您希望属性名称仍然是动态的?你为什么不能动态调整其他地方使用的名称?这里的大局是什么?