我正在通过在线视频教程学习 LINQ、ASP.NET、EF 和 MVC。我希望能帮助我理解 LINQ 扩展方法语法中的联接。
为简化起见,我有两个表(这些表映射到 SQL DB):
User Table:
public int userID{get;set;}
public string firstName{get;set;}
...
Address
public int ownerID{get;set;}
public int value{get;set;}
public string Nickname{get;set;}
public string street{get;set;}
public string zip{get;set;}
...
假设我想查找特定用户拥有的所有属性。我相信我可以做这样的事情:
var test = db.User
.Join(db.Address, user => user.userID, add => add.ownerID, (user, add) => new { user, add });
Source: http://byatool.com/c/linq-join-method-and-how-to-use-it/
这应该相当于
SELECT * FROM User a JOIN Address b on a.userID = b.ownerID
请确认这是正确的。
现在,如果我想查找特定用户拥有的所有具有value greater than x
. 让我们更进一步,说 x 是另一个 LINQ 查询的结果。如何强制执行x
第二个查询?我什至必须考虑这一点,还是 LINQ 知道在这种情况下该怎么做?
谢谢
编辑:当我尝试将查询结果用作另一个参数时,我需要使用贪婪运算符来强制执行。很多人喜欢用.Count()
or .ToList()
。我只希望x
(从上面的示例)通过使用返回 1 个字符串.Take(1)
。如果我追加ToList()
到我的第一个查询的末尾,我需要在我的第二个查询中使用 x[0]。这似乎是一种混乱的做事方式。当您知道只有 1 个结果时,是否有更好的方法来强制执行查询?