簡體   English   中英

ASP.NET MVC2 Linq where子句使用StartsWith

[英]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);
}

由於將WhereOrderBy推遲到您實際使用ToList()類的查詢進行操作之前,請嘗試執行以下操作:

var orderedData = presentations.ToList();

檢查它的順序應該正確,因為除非您執行SelectToList或其他操作,否則我看不到您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM