我有一个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(....);
由于
答案 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));
不是优化的解决方案,但有效。