[英]How do I select a single grouped column from a dataview?
我有一個包含多個列的 data.table tblWorkList
: RecordNr
、 GroupNum
、 Section
、 SubscriberID
和其他一些列。
我需要做的是創建一個相當於以下內容的數據視圖或第二個數據表:
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
,因此只需使用 LINQDistinct
:dt.AsEnumerable().Select(r => r.Field<string>("SubscriberID") ).Distinct()
。PS 你的第一個錯誤意味着
dt
是null
-source
是AsEnumerable
的參數名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.