我试图从数据表列中获取不同的值。这是我的代码..
var sourceItems = ds.Tables[0].AsEnumerable()
.GroupBy(x => x.Field<string>("Source").ToString())
.Select(x => x.First());
ddlSource.DataSource = sourceItems;
ddlSource.DataBind();
此代码返回4行System.Data.DataRow
作为值。我需要存储在行中的实际值而不是行类型。此代码也是在列中仅捕获不同值的正确方法吗?
答案 0 :(得分:4)
我会做这样的事情:
var sourceItems = ds.Tables[0].AsEnumerable()
.Select(x => x.Field<string>("Source"))
.Distinct()
.ToList();
请注意,可以跳过.ToList()
,但当然这取决于DataSource
对象的ddlSource
属性能够接受的内容。如果它是一个winforms控件,我怀疑ToList
是必要的。
您的代码与此代码基本相同,但您必须将最后Select
更改为Select(x => x.Key)
以选择用于对行进行分组的值,而不是第一行。
此外,您的代码比使用Distinct
的开销更大,因为GroupBy
会创建原始集合的子组。
答案 1 :(得分:0)
为什么不使用.Distinct
扩展方法?
ds.Tables[0].AsEnumerable()
.Select(x => x.Field<string>("Source").ToString())
.Distinct()
.FirstOrDefault();
答案 2 :(得分:0)
怎么样
var sourceItems = ds.Tables[0].AsEnumerable()
.Select(x => x.Field<string>("Source"))
.Distinct()
.ToList();
ddlSource.DataSource = sourceItems;
ddlSource.DataBind();
(您无需在字符串上调用.ToString()
,因此我已将其删除。)