ASP.NET MVC2 Linq Где Предложение с использованием StartsWith - PullRequest
0 голосов
/ 16 июля 2010

У меня есть несколько фильтров на мой взгляд, первый - это список по имени, фамилии и названию компании, когда один из этих вариантов выбран, пользователь может затем выбрать 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]

Ответы [ 2 ]

0 голосов
/ 16 июля 2010

Мне удалось решить проблему.Если вы посмотрите на запрос, строка

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

должна выглядеть так:

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

Не совсем уверен, почему это происходит, может кто-нибудь увидеть, как исправить эту проблему?

0 голосов
/ 16 июля 2010

Хорошо, после наших длинных комментариев ниже, почему бы вам просто не связать операторы 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();

Проверьте его, он должен быть в правильном порядке, поскольку я не вижу ничего плохого в вашем linq, кроме кода, который вы опубликовали, на самом делевыполняется до тех пор, пока вы не выполните Select или ToList или что-то еще с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...