ASP.NET MVC2 Linq Где Предложение с использованием 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]
2 ответа
Мне удалось решить проблему. Если вы посмотрите на запрос строку
LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[Id])
должен прочесть
LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[SpeakerId])
Не совсем уверен, почему это происходит, кто-нибудь может увидеть, как исправить эту проблему?
Хорошо, после наших длинных комментариев ниже, почему бы вам просто не связать операторы 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
или что-то с этим.