Linq:在数据表列中选择值

时间:2009-12-10 10:48:52

标签: c# linq datatable

如何使用LINQ (C#)datatable中特定行的特定列选择值。等价的SQL将是:

select NAME from TABLE where ID = 0

提前致谢。

7 个答案:

答案 0 :(得分:27)

感谢您的回答。我不明白什么类型的对象“MyTable”(在你的答案中),下面的代码给了我下面显示的错误。

DataTable dt = ds.Tables[0];
var name = from r in dt
           where r.ID == 0
           select r.Name;
  

无法找到源类型的查询模式的实现   'System.Data.DataTable'。 “哪里找不到”

所以我继续谷歌搜索,发现了一些有用的东西:

var rowColl = ds.Tables[0].AsEnumerable();
string name = (from r in rowColl
              where r.Field<int>("ID") == 0
              select r.Field<string>("NAME")).First<string>();

您怎么看?

答案 1 :(得分:19)

var name = from r in MyTable
            where r.ID == 0
            select r.Name;

如果该行是唯一的,那么您甚至可以这样做:

var row = DataContext.MyTable.SingleOrDefault(r => r.ID == 0);
var name = row != null ? row.Name : String.Empty;

答案 2 :(得分:7)

我注意到其他人已经给出了非lambda语法,所以为了完成这个我将放入等效的lambda语法:

非lambda(根据詹姆斯的帖子):

var name = from i in DataContext.MyTable
           where i.ID == 0
           select i.Name

等效lambda语法:

var name = DataContext.MyTable.Where(i => i.ID == 0)
                              .Select(i => new { Name = i.Name });

没有太多实际差异,只是您喜欢的个人意见。

答案 3 :(得分:1)

如果返回值是字符串,并且您需要按ID搜索,则可以使用:

string name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name")).ToString();

或使用通用变量:

var name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name"));

答案 4 :(得分:0)

var x  =  from row in table
          where row.ID == 0
          select row

假设您有一个知道行的DataTable,那么您需要使用行索引:

where row[rowNumber] == 0

在这种情况下,您还希望使用select将行数据放入匿名类或预备类(如果您想将其传递给另一个方法)

答案 5 :(得分:0)

var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString() 

答案 6 :(得分:0)

使用linq并将数据表设置为Enumerable,并从数据表字段中选择与您要查找的字段相匹配的字段。

示例

我想从货币表中获取货币ID和货币名称,货币是本地货币,并将货币ID和名称分配给表单上的文本框:

DataTable dt = curData.loadCurrency();
            var curId = from c in dt.AsEnumerable()
                        where c.Field<bool>("LocalCurrency") == true
                        select c.Field<int>("CURID");

            foreach (int cid in curId)
            {
                txtCURID.Text = cid.ToString();
            }
            var curName = from c in dt.AsEnumerable()
                          where c.Field<bool>("LocalCurrency") == true
                          select c.Field<string>("CurName");
            foreach (string cName in curName)
            {
                txtCurrency.Text = cName.ToString();
            }