当使用下面的代码时,它可以正常返回一个填充了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
元素的列表,但它会返回正确的金额,即我期望返回的项目数量。
答案 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)
因为g
是DataRow
个对象的集合,所以
.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();