c# - 具有多个条件的 SQL to LINQ 左外连接
问题描述
我在 LINQ 中使用多个条件来解决这个左外连接问题。我的初始 SQL 语句如下。
SELECT DISTINCT [Product].[prod_id],
[Product].[brd_id],
[Product].[prod_brdId],
[Size].[size_id],
[Size].[size_sort],
[Bin].[bin_rack],
[Bin].[bin_alpha]
FROM [Proddetails]
JOIN [Prodcolor]
ON [Proddetails].[pcl_id] = [Prodcolor].[pcl_id]
JOIN [Product]
ON [Prodcolor].[prod_id] = [Product].[prod_id]
JOIN [Size]
ON [Proddetails].[pdt_size] = [Size].[size_id]
LEFT OUTER JOIN [Bin]
ON [Product].[prod_id] = [Bin].[prod_id]
ORDER BY [Product].[brd_id], [Product].[prod_brdId], [Size].[size_sort]
以及我在 .NET 中对应的 LINQ 语句
BinProds = (
from pd in applicationDbContext.Proddetails
join pc in applicationDbContext.Prodcolors on pd.PclId equals pc.PclId
join pr in applicationDbContext.Products on pc.ProdId equals pr.ProdId
join sz in applicationDbContext.Sizes on pd.PdtSize equals sz.SizeId
join bn in applicationDbContext.Bins on pr.ProdId equals bn.ProdId into ps
from bn in ps.DefaultIfEmpty()
select new CoreBin
{
... fields here
}
).Distinct().OrderBy(i=>i.BrdId).ThenBy(j=>j.ProdBrdId).ThenBy(k=>k.SizeSort).ToList();
因此,这两个都分别在 SQL Server Studio 和 .NET 中成功执行。但是,它并没有给我我正在寻找的确切结果,因为它在 LEFT OUTER JOIN 上缺少一个附加条件。下面是我对 SQL 语句所做的一项更改,它提供了我在 SQL Server Studio 中想要的内容。我只是不知道如何调整 LINQ 以在我的 .NET 项目中获得相同的结果。
LEFT OUTER JOIN [Bin]
ON [Product].[prod_id] = [Bin].[prod_id]
AND [Bin].[size_id] = [Size].[size_id]
我希望有一个合理的调整。如果您需要我的表格输出或数据库设计,请告诉我。
解决方案
这应该给你想要的 SQL:
.....
join bn in applicationDbContext.Bins
on new { pr.ProdId, sz.size_id } equals new { bn.ProdId, bn.size_id } into ps
from bn in ps.DefaultIfEmpty()
select new CoreBin
{
... fields here
}
.....
推荐阅读
- object - 如何解决未定义对象的 TypeError
- c# - 从 C# 表单中搜索两个访问表
- firebase - 单独使用 Google Identity Platform + Firebase Auth
- javascript - 有没有办法在 firefox 扩展和 node.js 程序之间发送数据?
- laravel - Laravel 8 Multi Auth with Jetstream livewire
- sql - 使用空值加入和最大日期
- amazon-web-services - AWS 无服务器图像处理程序错误处理
- javascript - 展开所有文本区域,无需单击每个区域
- c++ - CMake find_package 用于非标准位置
- python - Python Selenium - 下拉菜单