LINQ - 如何动态连接多个表和订单?

时间:2018-05-31 12:57:39

标签: c# linq dynamic-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使用方法语法,但我不确定如何以这种方式完成编写内部联接。是否必须使用方法语法完成?如果确实如此,您能提供加入多个表的示例吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

错了!

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

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

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