使用LINQ从第一项检索属性
本文关键字:一项 检索 属性 LINQ 使用 | 更新日期: 2023-09-27 18:04:15
是否有更简单的方法在Linq中编写这个查询:
var prioritiy = db.Requirements.Where(r => r.ID == rowID).Select(r => r.Priority).First();
如果你的意思是"更简单"即"更少的代码",那么你的自我回答已经是最简洁的了:
db.Requirements.First(r => r.ID == rowID).Priority;
如果你的意思是"更简单",如"更少的数据库开销",那么你的原始版本稍微好一点:
db.Requirements.Where(r => r.ID == rowID).Select(r => r.Priority).First();
为什么?正如@IvanStoev在评论中指出的那样,LINQ的执行被推迟,直到你调用像First()
这样的"finish"方法。如果在后端使用SQL,则第二个示例将被转换为仅从数据库检索Priority字段的SQL语句,而第一个示例将检索匹配行的所有字段。
没关系。我刚刚发现,通过最初应用First(),我返回一个包含我正在寻找的属性的对象。代码变成:
var priority = db.Requirements.First(r => r.ID == rowID).Priority;
Visual Studio 2015的安全版本
var priority = db.Requirements.FirstOrDefault(r => r.ID == rowID)?.Priority;
如果你经常调用,你可以使用LookUp
var lookup = db.Requirements.ToLookup(r => r.ID, r => r.Priority);
var priority = lookup[rowID].FirstOrDefault();