繁体   English   中英

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

[英]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字段的值。

因为gDataRow对象的集合,所以

.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM