簡體   English   中英

LINQ to DataTable查詢

[英]LINQ to DataTable query

我有這樣的DataTable,我正在嘗試查詢。

ID|Language
sfd2133 English
asd213d English
vgjj31j English
fvjfjf2 German
dac31e3 English
asaq213 French
dent231 French
1dedae3 German

我設法獲得一種語言:

        IEnumerable<Tuple<string, string>> ids=
            from asset in selectedItems.AsEnumerable()
            select new Tuple<string, string>(asset["ID"].ToString(), 
            asset["Language"].ToString());

我如何獲得IEnumerable<List<Tuple<string, string>> ,其中List<Tuple<string,string>>是ID和單一市場的集合,僅說法語。

我不確定您真正想要實現什么。 獲取List而不是IEnumerable的最簡單方法是使用ToList()擴展方法:

List<Tuple<string, string>> ids=
            (from asset in selectedItems.AsEnumerable()
            select new Tuple<string, string>(asset["ID"].ToString(), 
            asset["Language"].ToString())).ToList();

如果要獲取IEnumerable<List<>> ,其中每個列表僅包含一種語言的行,則可以使用分組語法:

IEnumerable<List<Tuple<string, string>>> ids=
            from asset in selectedItems.AsEnumerable()
            group asset by asset["Language"].ToString() into g
            select g.Select(i => new Tuple<string, string>(i["ID"].ToString(), 
            i["Language"].ToString())).ToList();

因此,您想按語言分組。

為什么不使用Dictionary<string, IEnumerable<String>>呢?

Dictionary<String, IEnumerable<String>> DialogResult =
            selectedItems.AsEnumerable()
            .GroupBy(r => r.Field<string>("Language"))
            .ToDictionary(g => g.Key, g => g.Select(r => r.Field<string>("ID")));

關鍵是語言,值是相應ID的IEnumerable<String>

例如,如果要列出English的所有ID,則可以執行以下操作:

var englishIDs = DialogResult["English"];
String output = string.Join(", ", englishIDs); // sfd2133, asd213d, vgjj31j, dac31e3

Dictionaries具有最佳的查找性能。

Hello try with (Essaye avec ce code Wild)

(from asset in selectedItems.AsEnumerable()

select new
{
   ID= asset.Field<String>("ID"),
   Language= asset.Field<String>("Language")
})
.AsEnumerable()
.ToDictionary(k => k.ID, v => v.Language);

暫無
暫無

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

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