簡體   English   中英

Linq Select子句帶未知字段數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM