2017-10-16 134 views
-3

我有一个List<string>其中存储数据库表列的名称。从列表中选择列

我需要从c#linq查询中仅选择此列(其中名称存储到列表中)。

可能吗?

我试试这个代码,但我不知道我怎样才能在选择放置:

我试试这个代码

items = items.ToList(); 
      _items.Add(new FieldItem() { FieldName = "field1" }); 
      _items.Add(new FieldItem() { FieldName = "field2" }); 
      _items.Add(new FieldItem() { FieldName = "field3" }); 
      _items.Add(new FieldItem() { FieldName = "field4" }); 

      _db.Table.Where(a => a.TimeStamp > DateTime.Now.AddHours(-1)).Select(....); 

感谢

+1

是的,这是可能的。给我们你现在已经尝试过的东西。 – Rob

+1

包括样本名单,预期产出和你已经尝试 –

+1

请仔细阅读[问]和[编辑]你的问题包括[MCVE]什么。 –

回答

0

最后,我使用反射。 在字符串列表中存储属性名称。 通过名称获取物业,并获得它的价值。

通过这种方式让所有的PropertyInfo一类:

PropertyInfo[] propertyInfos; 
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public | 
               BindingFlags.Static); 

当属性名的比赛中,更新属性值:

property.SetValue(child, parentProperty.GetValue(parent)); 

不是一个优化的解决方案,但工程。

0

通过的NuGet获取Dapper

认沽在使用你的代码后:

using Dapper; 

,你是好去。您现在需要做的就是(使用您发布的示例):

using (YourDbContext _db = new YourDbContext()) 
{ 
    return _db.Database.Connection.Query($"SELECT {string.Join(",", _items.Select(if => if.FieldName))} FROM Table WHERE TimeStamp > @TimeStamp;", new { TimeStamp = DateTime.Now.AddDays(-1) }); 
} 

此方法将返回IEnumerable,它将包含所有字段。结果可以输入到IDictionary中,其中键是列名,值是实际值。

因此,举例来说,如果我们拿到的第一行从第()的结果,我们可以访问域值是这样的:

var value = ((IDictionary<string, object>)result.First())["column_name"]; 
+0

谢谢。它工作正常。 –