ASP.NET MVC2 Linq Where Clause using StartsWith

◇◆丶佛笑我妖孽 提交于 2019-12-02 18:37:52

问题


I have a few filters on my view, the first one is list by first name, last name and company name when one of these options are selected the user can then select a, b, c ... x, y, z to show only people starting with the selected letter.

if (collection["Filter"] == "2") {
    presentations = presentations.Where(x => x.Person.FirstName.StartsWith("A"));
    presentations = presentations.OrderBy(x => x.Person.FirstName);
}

Results returned are similar to

John Squirel
Basil Boywiz
David Smith 

This doesn't seem to work, what am I missing?

I dug a little further, this is the query causing the problem.

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]

回答1:


Ok after our long comments below, why don't you just chain the linq statements like below?

if (collection["Filter"] == "2") { 
   presentations = presentations.Where(x => x.Person.FirstName.StartsWith("A")).
       OrderBy(x => x.Person.FirstName);
}

Since the Where and the OrderBy are deferred until you actually do something with the query like a ToList(), try doing:

var orderedData = presentations.ToList();

Inspect it, it should be in the correct order as I can't see anything wrong with your linq other than the code you posted never actually is executed until you do a Select or ToList or something with it.




回答2:


I have managed to resolve the problem. If you look at the query the line

LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[Id])

should read

LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[SpeakerId])

Not quite sure why this is happening though, can anyone see how to correct this problem?



来源:https://stackoverflow.com/questions/3262155/asp-net-mvc2-linq-where-clause-using-startswith

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!