[英]ASP.NET MVC2 Linq Where Clause using StartsWith
我的視圖中有幾個過濾器,第一個是按名字,姓氏和公司名稱列出,當選擇了其中一個選項時,用戶可以選擇a,b,c ... x,y,z進行顯示只有以所選字母開頭的人。
if (collection["Filter"] == "2") {
presentations = presentations.Where(x => x.Person.FirstName.StartsWith("A"));
presentations = presentations.OrderBy(x => x.Person.FirstName);
}
返回的結果類似於
John Squirel
Basil Boywiz
David Smith
這似乎不起作用,我想念什么?
我進一步挖掘了一下,這是導致問題的查詢。
SELECT [t0].[Description], [t0].[EventId], [t0].[Id], [t0].[PresentedOn],
[t0].[Slug], [t0].[SpeakerId], [t0].[Title], [t0].[Url]
FROM [Presentations] AS t0
LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[Id])
WHERE ([t1].[FirstName] LIKE 'B' + '%')
ORDER BY [t1].[FirstName]
好吧,下面我們進行了長時間的評論后,為什么不像下面這樣鏈接linq語句呢?
if (collection["Filter"] == "2") {
presentations = presentations.Where(x => x.Person.FirstName.StartsWith("A")).
OrderBy(x => x.Person.FirstName);
}
由於將Where
和OrderBy
推遲到您實際使用ToList()
類的查詢進行操作之前,請嘗試執行以下操作:
var orderedData = presentations.ToList();
檢查它的順序應該正確,因為除非您執行Select
或ToList
或其他操作,否則我看不到您的linq出錯,除了您從未發布過的代碼外,實際上沒有執行過。
我設法解決了這個問題。 如果您查看查詢行
LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[Id])
應該讀
LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[SpeakerId])
雖然不太確定為什么會這樣,但是有人可以看到如何解決此問題嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.