首页 > 解决方案 > LINQ - 如何连接多个表并动态排序?

问题描述

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

任何帮助表示赞赏。

标签: c#linqdynamic-linq

解决方案


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

是错的!

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

Linq 方法不会修改查询,而是返回与原始查询不同的新查询。

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


推荐阅读