从列表中选择列

时间:2017-10-16 13:35:27

标签: c# linq select

我有一个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(....);

由于

2 个答案:

答案 0 :(得分: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,其中键是您的列名,值是实际值。

例如,如果我们使用First()获取结果中的第一行,我们可以像这样访问字段值:

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

答案 1 :(得分:0)

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

以这种方式获取类的所有PropertyInfo:

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

当属性名称匹配时,使用:

更新属性值
property.SetValue(child, parentProperty.GetValue(parent));

不是优化的解决方案,但有效。