为什么Linq ToList <string>返回System.Data.DataRow?</string>

时间:2014-01-29 18:24:35

标签: c# linq list ienumerable

当使用下面的代码时,它可以正常返回一个填充了DataRows的var,我可以循环:

var GetSetRows = Order.AsEnumerable()
                      .GroupBy(r => r.Field<string>("Job_No"))
                      .Where(g => g.Count() > 1)
                      .Select(g => g.First());

但我想做的是返回List<string>

我试过了:

List<string> c_strLSetTitle = Order.AsEnumerable()
                                   .GroupBy(r => r.Field<string>("Job_No"))
                                   .Where(g => g.Count() > 1)
                                   .Select(g => g.First().ToString()).ToList();

但是这会返回一个列有System.Data.DataRow元素的列表,但它会返回正确的金额,即我期望返回的项目数量。

3 个答案:

答案 0 :(得分:4)

g.First()返回DataRow类型的对象。然后,您正在调用ToString(),它返回类型名称System.Data.DataRow。最后,您有一个类型名称列表。

如果要选择特定列,则将行组项目转换为(第一行)某些字段的值:

g.First().Field<string>("FieldName")

如果您想要返回Job_No提交的值

,则可以使用分组键
List<string> c_strLSetTitle = Order.AsEnumerable()
                                   .GroupBy(r => r.Field<string>("Job_No"))
                                   .Where(g => g.Count() > 1)
                                   .Select(g => g.Key).ToList();

这将返回重复的Job_No字段的值。

答案 1 :(得分:2)

因为gDataRow个对象的集合,所以

.Select(g => g.First().ToString())

返回字符串System.Data.DataRow

的集合

如果要从每个数据行中提取字段,请使用:

.Select(g => g.First().Field<{type}>("{fieldname}").ToString())

答案 2 :(得分:0)

试试这个

List<string> c_strLSetTitle = Order.AsEnumerable()
                                     .GroupBy(r => r.Field<string>("Job_No"))
                                     .Where(g => g.Count() > 1)
                                    .Select(g => g.Key).ToList();