我有一个字符串变量myFieldname。如何在linq表达式中将其值用作别名?
收起
string myFieldname = "theName";
var q = (from d in data select new { d.Id, myFieldname = d.Amount });
我希望theName
成为别名,而不是myFieldname
本身。
答案 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
}
您可以将ExpandoObject
与dynamic
API一起使用,但即使这样,我也不清楚这对您有什么帮助...
答案 1 :(得分:6)
你不能 - 很容易 - 因为匿名类型在你的代码中最终成为真正的类型,包括属性名称。
您必须在执行时生成类型,然后为投影创建表达式树。这对我来说听起来像是很多。
为什么您希望属性名称仍然是动态的?你为什么不能动态调整其他地方使用的名称?这里的大局是什么?