linq中的动态投影

时间:2017-09-26 04:26:37

标签: c# sql-server entity-framework linq

我有以下字符串字典:

pos($string)

我的数据库表看起来像这样(Crazy,我知道):

FirstName | Col1
LastName  | Col2
Email     | Col3   

现在,我需要在带有别名的c#代码中选择一个值列表。使用投影很容易做到这一点(就像我可以硬编码属性名和列名一样,这将解决这个问题):

Id   Col1   Col2    Col3
1    John   Doe     test@email.com   

但不幸的是,我只在字典中将列名和alises存储为字符串。看起来这是表达式树或动态sql的工作,但我无法弄清楚如何实现这一点。我尝试使用Expando对象,但作为回报,我得到了一个字典,而我需要一个包含FirstName,LastName,Email列的列表。

1 个答案:

答案 0 :(得分:3)

您可以将SQL查询动态构造为简单的字符串:

var dict = new Dictionary<string, string>
{
    ["FirstName"] = "Col1",
    ["LastName"] = "Col2",
    ["Email"] = "Col3"
};

var query = $"select {String.Join(", ", dict.Select(x => $"{x.Value} as {x.Key}"))} from myTable";

var items = ctx.Database.SqlQuery<object>(query).ToList();