2016-03-02 56 views
0

我正在從數據庫獲取記錄並將結果存儲到數據集中。從數據表使用linq獲取不同的記錄到數據表並顯示數據表的所有列

我喜歡這個

Sid Table userid par1 par2 par3 
274 tbl1 43  0 0 0 
232 tbl1 43  1 2 0 
232 tbl1 43  1 2 1 
232 tbl2 43  1 2 0 
232 tbl2 43  1 2 1 

我想告訴所有的6列,但不同的record.Distinct應該是希德的數據集,表和userid.I希望這樣

Sid Table userid par1 par2 par3 
274 tbl1 43  0 0 0 
232 tbl1 43  1 2 0 
232 tbl2 43  1 2 0 

這樣用輸出以下查詢。我是linq新手。

Datatable.Rows.Cast<DataRow>() 
.GroupBy(r => new { Sid = r.Field<int>("Sid"), userid = r.Field<int>("userid"), Table = r.Field<string>("Table") }) 
.Select(e => e.FirstOrDefault()) 
.Select(grp => new 
{ 
    Sid = grp.Field<int>("Sid"), 
    userid = grp.Field<int>("userid"), 
    Table = grp.Field<string>("Table"), 
    par1 = grp.Field<int>("par1"), 
    par2 = grp.Field<int>("par2"), 
    par3 = grp.Field<int>("par3") 
}); 

我的專欄是動態的,在nature.some用戶已經par2的,一些喜歡that.Is有什麼辦法可以選擇所有列,而不是指定的列名?

+0

你想要結果作爲數據行或匿名類型? – RePierre

+0

我想將結果綁定到gridview –

回答

0

邏輯上這種方法可能不正確。例如,在你的記錄集中,第二行和第三行可以根據Sid,表格和用戶標識清楚地過濾爲一行。但是,如果要訪問不同查詢中的所有字段,則結果將是可能導致par3基於返回的行具有不同值的任一行。

Sid Table userid par1 par2 par3 
232 tbl1 43  1 2 0 
232 tbl1 43  1 2 1 

如果你已經決定讓每個組的第一行的所有領域,無論,然後用下面的代碼

var distinct2 = (from t in InYourDatabaseRows 
group t by new { t.Sid, t.Table, t.userid } 
into grp 
select new { 
Sid = grp.Key.Sid, 
Table = grp.Key.Table, 
userid =grp.Key.userid, 
par1 = grp.First().par1, 
par2 = grp.First().par2, 
par3 = grp.First().par3 
}).ToList();  
0

如果我理解正確你的榜樣,你需要的是用描述下面的算法:

  • 組的行由SidTableuserid
  • 從組

返回首行要做到這一點,你可以使用下面的代碼:

var distinct = Datatable.Rows.Cast<DataRow>() 
    .GroupBy(r => new 
    { 
     Sid = r.Field<int>("Sid"), 
     userid = r.Field<int>("userid"), 
     Table = r.Field<string>("Table") 
    }) 
    .Select(g => g.First()) 

,因爲他們上面的代碼將返回DataRow對象的集合與原來的數據和結構在Datatable。您可以將行綁定到任何網格,而不會冒着遇到關於缺少成員的錯誤的風險。

+0

沒有RePierre,它不工作。我得到錯誤,'System.Data.DataRow'不包含名爲'Sid'的屬性。當我嘗試綁定gridview。 –

+0

@JuiTest,這很奇怪 - 爲什麼要尋找一個屬性?它應該尋找名爲'Sid'的屬性而不是屬性。 – RePierre

+0

,我用烏爾查詢並轉換成datatable.So我可以結合它的GridView –

相關問題