[英]generic algorithm to convert the return values of the System.Data.DataRow Indexer
[英]Why does Linq ToList<string> return System.Data.DataRow?
使用以下代码时,可以很好地返回一个充满DataRows的变量,我可以循环执行:
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
元素,但它确实返回了正确的数量,即我希望返回的项目数量。
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
字段的值。
因为g
是DataRow
对象的集合,所以
.Select(g => g.First().ToString())
返回字符串System.Data.DataRow
的集合
如果要从每个数据行提取一个字段 ,请使用:
.Select(g => g.First().Field<{type}>("{fieldname}").ToString())
尝试这个
List<string> c_strLSetTitle = Order.AsEnumerable()
.GroupBy(r => r.Field<string>("Job_No"))
.Where(g => g.Count() > 1)
.Select(g => g.Key).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.