LINQ to DataTable查询

时间:2012-07-06 09:47:09

标签: .net linq

我有这样的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和单一市场的集合,仅限法语。

3 个答案:

答案 0 :(得分:2)

我不确定你真正想要实现的目标。获取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();

答案 1 :(得分:2)

所以你想按语言分组。

为什么不使用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>

如果您想要列出英语的所有ID,您可以这样做:

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

Dictionaries具有最佳的查找性能。

答案 2 :(得分:1)

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);