Linq:在数据表列中选择值

ian*_*eks 26 c# linq datatable

如何使用LINQ (C#)为特定行中的特定行选择值datatable.相当于SQL:

select NAME from TABLE where ID = 0
Run Code Online (Sandbox Code Playgroud)

提前致谢.

ian*_*eks 27

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

DataTable dt = ds.Tables[0];
var name = from r in dt
           where r.ID == 0
           select r.Name;
Run Code Online (Sandbox Code Playgroud)

找不到源类型"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>();
Run Code Online (Sandbox Code Playgroud)

你怎么看?


Jam*_*mes 20

var name = from r in MyTable
            where r.ID == 0
            select r.Name;
Run Code Online (Sandbox Code Playgroud)

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

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


fyj*_*ham 7

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

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

var name = from i in DataContext.MyTable
           where i.ID == 0
           select i.Name
Run Code Online (Sandbox Code Playgroud)

等效的lambda语法:

var name = DataContext.MyTable.Where(i => i.ID == 0)
                              .Select(i => new { Name = i.Name });
Run Code Online (Sandbox Code Playgroud)

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

  • 是啊,你说得对。当然,您仍然可以在末尾执行“.SingleOrDefault()”(例如:`string name = DataContext.MyTable.Where(i =&gt; i.ID == 0).Select(i =&gt; i.Name).SingleOrDefault ();` 只会查询第 1 列)。SingleOrDefault 本质上没有什么“获取全部”的东西,您只需要为此链接查询即可。话虽如此,性能开销通常可以忽略不计,除非其他列中有一些非常大的数据。 (2认同)