Linq:在数据表列中选择值

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

 select NAME from TABLE where ID = 0 

提前致谢。

 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; 

谢谢你的回答。 我不明白什么类型的对象“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("ID") == 0 select r.Field("NAME")).First(); 

你怎么看?

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

非lambda(根据詹姆斯的post):

 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 }); 

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

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

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

或使用通用变量:

 var name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field("name")); 
 var x = from row in table where row.ID == 0 select row 

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

 where row[rowNumber] == 0 

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

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

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

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

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