在Linq中从数据表中选择不同的行

本文关键字:数据表 Linq 选择 | 更新日期: 2023-09-27 18:05:04

我使用linq查询从数据表中选择2个不同的列id和name。我有下面的代码,但它抛出错误特定的cast是无效的。

sdatatable = ds.Tables[0].AsEnumerable().Where(x => x.Field<string>    
             ("TableName") == "header").CopyToDataTable();
rptcourse.DataSource = sdatatable.AsEnumerable().Select(row => new
        {
            locationid = row.Field<string>("locationID"),
            locationname = row.Field<string>("locationname")
        }).Distinct();

在Linq中从数据表中选择不同的行

此代码返回IEnumerble<T>,而DataSource可能期待List<T>。在Distinct()后面添加ToList():

rptcourse.DataSource = sdatatable.AsEnumerable().Select(row => new
        {
            locationid = Convert.ToInt32(row["locationid"]),
            locationname = row.Field<string>("locationname")
        }).Distinct().ToList();

你也可以这样连接两个查询:

rptcourse.DataSource  = ds.Tables[0].Where(x => x.Field<string>("TableName") == "header")
            .Select(row => new
            {
                locationid =  Convert.ToInt32(row["locationid"])
                locationname = row.Field<string>("locationname")
            })
            .Distinct().ToList();