[英]Linq Select Clause w/ Unknown Number of Fields
我有一個linq查詢,在其中我需要能夠從數據表中選擇可變數量的字段。 我確實知道可以包括的所有字段,但是肯定只有兩個字段在數據表中。 我還將知道數據表中包含哪些字段(根據用戶的選擇而有所不同)。 現在,我設置了以下內容:
var query = from item in dt.AsEnumerable()
group item by item.Field<string>("ID") into g
select new
{
ID = g.Key, //required
Status = g.Min(i => dostuff(i,"Status")), //not required
Disc = g.Min(i => dostuff(i,"Disc")), //not required
Loc = String.Join<string>(",", from i in g select i.Field<string>("Loc")) //required
};
dostuff(DataRow i,string field)
{
try
{
return i.Field<string>(field);
}
catch
{
return null;
}
}
因此dostuff基本上只是檢查數據集中是否存在該字段,然后在處理查詢結果時我只需要忽略不存在的字段,這不會太困難。 但是,似乎有更好的方法可以執行此操作,但是我很難通過Google找到有關使用動態select子句的任何信息。
您可以使用動態類型(nb,我沒有測試過,所以可能會有錯別字。):
var query =dt.AsEnumerable().GroupBy(item => item.Field<string>("ID"))
.Select(g => {
dynamic t = new System.Dynamic.ExpandoObject();
if (g.Table.Columns.Any(c => c.ColumnName == "Status"))
t.Status = g.Field<string>("Status");
if (g.Table.Columns.Any(c => c.ColumnName == "Disc"))
t.Disc = g.Field<string>("Disc");
t.ID = g.Key;
t.Loc = String.Join<string>(",",g.Select(i => i.Field<string>("Loc")));
return t;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.