我現在有這樣對我倉庫裏的方法:如何構造部分動態的LINQ語句?
public int GetMessageCountBy_Username(string username, bool sent)
{
var query = _dataContext.Messages.AsQueryable();
if (sent)
query = query.Where(x => x.Sender.ToLower() == username.ToLower());
else
query = query.Where(x => x.Recipient.ToLower() == username.ToLower());
return query.Count();
}
目前,它建立了基於該sent
布爾兩個查詢之一。這是做到這一點的最佳方式,還是有一種方法可以在查詢本身內執行此操作嗎?我想檢查x.Sender
是否等於username
如果sent
等於true。但是我想檢查x.Recipient
是否等於username
如果sent
等於false。
然後我想要這個LINQ表達式轉換爲實體框架中的SQL,我相信它正在做。
我只是想避免重複儘可能多的代碼。
Bravo!這更有意義。謝謝。 – Chev 2011-05-25 13:45:27
雖然我修改了一些功能。 lambda聲明必須先於inline IF語句。 – Chev 2011-05-25 17:03:02
看起來我一直在接受答案時跳過槍。我應該先測試一下。這絕對有效,但不針對IQueryable。表達式樹應該被翻譯成一個SQL表達式。這意味着這個LINQ語句不能調用另一個函數,所有相關的數據必須包含在表達式中才能使SQL翻譯起作用。一個.ToList()會使它工作,但會犧牲在數據源中執行查詢的能力。儘管謝謝你的回答! –
Chev
2011-05-25 18:31:48