c# - 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 的示例都使用方法语法,但我不确定如何以这种方式完成编写我的内部联接。是否必须使用方法语法来完成?如果是这样,你能提供一个加入多个表的例子吗?
任何帮助表示赞赏。
解决方案
这
sortedResults.OrderBy("PatternName").ThenBy("Model");
是错的!
sortedResults = sortedResults.OrderBy("PatternName").ThenBy("Model");
Linq 方法不会修改查询,而是返回与原始查询不同的新查询。
您不能通过使用 linq 语法来使用动态 linq。您必须使用函数式语法。
推荐阅读
- css - Safari - 转换在 Safari 中不起作用(手机版)
- php - 如何将 Laravel 工厂用于对象(不是模型)
- mongodb - MongoDB小于条件
- windows - 启动 PostgreSQL 服务器中的“pg_ctl start”和“net start PostgreSQL”有什么区别?
- quart - 将文件上传到基于夸脱的服务器
- terraform - terraform .11 到 .12 的更改导致空列表很重要
- cmd - Graphviz:无法在 release/bin 中找到 cluster.exe 以在控制台中使用 Cluster Tool
- reactjs - 如何使用 redux saga 将返回的 fetch 数据传递给 reducer
- deployment - 在根目录下部署 Laravel 5.7
- azure - 所有者级别的服务主体权限不适用于 Azure Active Directory