簡體   English   中英

如何 select 來自數據視圖的單個分組列?

[英]How do I select a single grouped column from a dataview?

我有一個包含多個列的 data.table tblWorkListRecordNrGroupNumSectionSubscriberID和其他一些列。

我需要做的是創建一個相當於以下內容的數據視圖或第二個數據表:

SELECT SubscriberID FROM tblWorkList GROUP BY SubscriberID;

我在應用程序中這樣做是因為我需要它最終出現在一個數據視圖中,然后該數據視圖將根據多個用戶輸入進行過濾。 我有那部分工作。 我已經花了好幾個小時在 inte.net 上苦思冥想,試圖弄清楚如何做到這一點,但我一直遇到解決方案中的錯誤,這些解決方案看起來應該可以工作,但最終卻以驚人的失敗告終。 盡管如此,我現在對 LINQ 非常缺乏經驗,所以我確定我錯過了一些非常簡單的東西。

(基本功能是這樣的:該表包含要處理的記錄列表。基本上,我需要獲取充滿記錄的表,將訂閱者 ID 拉入數據視圖,允許用戶通過各種過濾該數據視圖方法(並為用戶提供與所選標准匹配的 SubscriberID 數量的運行計數),完成后,將與生成的SubscriberID集合關聯的所有記錄分配給要處理的特定分析師。)

我試圖用來創建 SubscriberID 值的列表或數據視圖的所有方法都包含在以下內容中:

using (DataTable dt = dsWorkData.Tables["tblWorkData"])

tblWorkData包含大約 23,000 條記錄。

這是我的幾次嘗試。

嘗試 1 - 錯誤是

參數可能不是null。參數:source'

var result1 = from row in dt.AsEnumerable()
              group row by row.Field<string>("SubscriberID") into grp
              select new { SubscriberID = grp.Key };

ShowMessage(result1.Count().ToString());

嘗試 2 - 錯誤是

'無法隱式轉換匿名類型:字符串 SubscriberID 到 DataRow'

EnumerableRowCollection<DataRow> query =
    from row in dt.AsEnumerable()
    group row by row.Field<string>("SubscriberID") into grp
    select new { SubscriberID = grp.Key };

嘗試 3 - 錯誤是

“當前上下文中不存在 [第三個] 名稱“行”。”

EnumerableRowCollection<DataRow> query2 =
    from row in dt.AsEnumerable()
    group row by row.Field<string>("SubscriberID") into grp
    select row;

嘗試 4 - 與嘗試 1 相同的錯誤:

DataTable newDt = dt.AsEnumerable()
    .GroupBy(r => new { SubscriberID = r["SubscriberID"] })
    .Select(g => g.OrderBy(r => r["SubscriberID"]).First())
    .CopyToDataTable();

MessageBox.Show(newDt.Rows.Count.ToString());

嘗試 5 - 與嘗試 1 相同的錯誤:

var result = dt.AsEnumerable().GroupBy(row => row.Field<string>("SubscriberID"));

MessageBox.Show(result.Count().ToString());

嘗試 6 - 與嘗試 1 相同的錯誤:

var results = dt.AsEnumerable().GroupBy(g => g["SubscriberID"])
                                          .Select(x => x.First());
MessageBox.Show(results.Count().ToString());

那么有人可以解釋我在這里做錯了什么,或者至少給我指出正確的方向嗎? 我真的不在乎使用哪種方法,為了記錄,只要有辦法做到這一點。

答案是來自 NetMage 的一對評論:

您的 SQL 查詢實際上是使用GROUP BY來執行DISTINCT ,因此只需使用 LINQ Distinctdt.AsEnumerable().Select(r => r.Field<string>("SubscriberID") ).Distinct()

PS 你的第一個錯誤意味着dtnull - sourceAsEnumerable的參數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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