循环LINQ查询列(不是行)
本文关键字:LINQ 查询 循环 | 更新日期: 2023-09-27 18:12:29
是否可能,如果是,如何循环遍历LINQ查询的结果?
像这样:
var results= from a in dt.AsEnumerable()
where a.Field<int>("id") == i
select new
{
id= a.Field<int>("id"),
a= a.Field<double>("a"),
b = a.Field<double>("b")
};
IEnumerable<string> colNames = results.First().GetType().GetProperties()
.Select(p => p.Name);
string[] columns = colNames.ToArray();
int i = 0;
foreach (var row in results)
{
for (int i = 0; i < columns.Count(); i++)
{
string foobar = (string)row[columns[i]];
i++;
}
}
基本上,我想复制以下功能:
DataRow dr = new DataRow();
string foobar = dr[columns[i];
谢谢大家。
如果您可以选择更改原始LINQ语句以生成允许您执行所需操作的数据结构,我绝对建议您这样做。
如果没有,则需要使用反射根据名称查找匿名类型的属性,然后通过反射获得这些属性的值:
PropertyInfo[] columns = results.First().GetType().GetProperties();
...
string foobar = columns[i].GetValue(row, null);
Action<string> processColumName = (cname) =>
{
// do anything you want with a column name
string foo = (string) Row[cname];
};
results.First()
.GetType()
.GetProperties()
.Select(p => p.Name)
.ToList().ForEach(processColumName);
我的答案实际上是基于别人的答案(我会在下面留下一个链接),略有变化:stovroz
代码如下:
foreach(var item in db.Products) {
System.Reflection.PropertyInfo[] fields = Product.GetType().GetProperties();
foreach(var f in fields) {
Console.WriteLine(f.Name + ": " + f.GetValue(item));
}
}
实际上我正在寻找这样一个解决方案来达到动态LINQ的使用,这个家伙救了我的一天。非常感谢他!