LINQ - Как объединить несколько таблиц и порядок динамически? - PullRequest
0 голосов
/ 31 мая 2018

Я определенно видел подобные вопросы, но по какой-то причине я не могу заставить этот запрос работать правильно.Я использую System.Linq.Dynamic.Core и пытаюсь упорядочить результаты в зависимости от ввода пользователя.Строка «PatternName, Model» в примерах обычно является переменной.Вот что я попробовал.

IQueryable sortedResults = from reqs in dataContext.Requirements
                                   join pats in dataContext.Patterns on reqs.PatternRequirement equals pats.Id
                                   join sups in dataContext.Suppliers on reqs.SupplierRequirement equals sups.Id
                                   orderby ("PatternName, Model")
                                   select new
                                   {
                                       reqs.Id,
                                       sups.SupplierName,
                                       pats.PatternName,
                                       reqs.Model,
                                       reqs.YardageRequirements,
                                       reqs.Repeat,
                                       reqs.ModelDescription,
                                       reqs.CreateUser,
                                       reqs.CreateTimeStamp,
                                       reqs.UpdateUser,
                                       reqs.UpdateTimeStamp
                                   };

return sortedResults;

Это компилируется и запускается без ошибок, но мой набор результатов все еще не упорядочен так, как мне нужно.Я также пытался:

IQueryable sortedResults = from reqs in dataContext.Requirements
                                   join pats in dataContext.Patterns on reqs.PatternRequirement equals pats.Id
                                   join sups in dataContext.Suppliers on reqs.SupplierRequirement equals sups.Id
                                   select new
                                   {
                                       reqs.Id,
                                       sups.SupplierName,
                                       pats.PatternName,
                                       reqs.Model,
                                       reqs.YardageRequirements,
                                       reqs.Repeat,
                                       reqs.ModelDescription,
                                       reqs.CreateUser,
                                       reqs.CreateTimeStamp,
                                       reqs.UpdateUser,
                                       reqs.UpdateTimeStamp
                                   };

sortedResults.OrderBy("PatternName").ThenBy("Model");

return sortedResults;

Это также работает без ошибок, но дает тот же результат.В большинстве примеров, которые я видел при использовании Dynamic Linq, используется синтаксис метода, но я не уверен, как сделать так, чтобы мои внутренние объединения выполнялись таким образом.Это должно быть сделано с использованием синтаксиса метода?И если да, можете ли вы привести пример объединения нескольких таблиц?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 31 мая 2018

sortedResults.OrderBy("PatternName").ThenBy("Model"); 

не так!

sortedResults = sortedResults.OrderBy("PatternName").ThenBy("Model"); 

Методы Linq не изменяют запрос, а возвращают новый запрос, отличный от исходного.

Вы не можете использовать динамический linq с помощью синтаксиса linq,Вы должны использовать функциональный синтаксис.

...