LINQ - 如何连接多个表并动态排序?

LINQ - How to join multiple tables and order by dynamically?

我肯定见过类似的问题,但出于某种原因,我无法使此查询正常工作。我正在使用 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 的示例都使用方法语法,但我不确定如何以这种方式完成编写我的内部联接。是否必须使用方法语法来完成?如果可以,您能否提供一个连接多个表的示例?

感谢任何帮助。

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

错了!

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

Linq 方法不修改查询,而是 return 一个不同于原始查询的新查询。

您不能通过使用 linq 语法来使用动态 linq。您必须使用函数式语法。