我正在通過在線視頻教程學習LINQ,ASP.NET,EF和MVC。我會喜歡一些幫助理解LINQ擴展方法語法中的聯接。Linq擴展加入方法
爲了簡化起見,我有兩個表(它們映射到SQL數據庫):
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()
或.ToList()
。我只希望x
(來自上面的示例)通過使用.Take(1)
返回1個字符串。如果我追加ToList()
到我的第一個查詢結束,我需要在我的第二個查詢中使用x [0]。這似乎是一種混亂的做事方式。當你知道只有1個結果時,是否有更好的方法來強制執行查詢?
聽起來像你可以試試看,如果它會工作,或會發生什麼。你似乎有想要嘗試的想法。如果經過幾次嘗試,你無法實現它,在這裏發佈你的代碼以及你得到的錯誤將幫助我們判斷你的位置。 – Servy
@Servy我對我的問題做了一些修改。如果您有機會請檢查它。謝謝 – Jeff
看來你正在尋找以下其中之一:'First','FirstOrDefault','Single','SingleOrDefault'。 – Servy