gpt4 book ai didi

c# - Linq Left join, where, group by, count()

转载 作者:太空狗 更新时间:2023-10-29 23:06:03 24 4
gpt4 key购买 nike

我需要有关在 linq 语句中执行左连接的帮助。我的 T-sql 查询按预期工作,但我似乎无法从 Linq 获得想要的结果。我也意识到有很多像我这样的问题,但我似乎无法将任何解决方案应用于我的案例。

产品表

+---+------------+-----------+
| |transportID | Type(int)|
+---+------------+-----------+
| 1 | 5 | 1 |
| 2 | 5 | 3 |
| 3 | 6 | 3 |
+---+------------+-----------+

商店

+---+------------+-------------+
| |Name |Type1(string)|
+---+------------+-------------+
| 1 | Ho | 1 |
| 2 | He | 2 |
| 3 | Be | 3 |
| 4 | Ke | 4 |
| 5 | Fe | 5 |
+---+------------+-------------+

我想要的结果是

+---+------------+-------------+
| |Type |Count |
+---+------------+-------------+
| 1 | 1 | 1 |
| 2 | 2 | 0 |
| 3 | 3 | 1 |
| 4 | 4 | 0 |
| 5 | 5 | 0 |
+---+------------+-------------+

按预期工作的我的 tsql

SELECT 
Type1,
Count(Pro.transportId) as Count

FROM dbo.stores as sto

left Join dbo.products as pro on (sto.Type1 = pro.Type AND pro.transportId=5)

Where Type1 is not null
group by Type1
ORDER BY Type1 * 1 ASC

我的 Linq 尝试返回了这个。

+---+------------+-------------+
| |Type |Count |
+---+------------+-------------+
| 1 | 1 | 1 |
| 3 | 3 | 1 |
+---+------------+-------------+

Linq 语句。

var res =   (from sto in _context.Stores
join pro in _context.Products on sto.Type1 equals System.Data.Objects.SqlClient.SqlFunctions.StringConvert((double)pro.Type).Trim()
where pro.transportId == transportId
group pro by pro.Type1 into pt1
select new TypeTransportation()
{
Type = pt1.Key, // Needs to be int
Count = pt1.Count()
}).ToList();

我试过做一些 defaultifempty 但似乎无法让它工作。

最佳答案

这是 MSDN 链接“如何:使用 LINQ 执行左外连接”:https://msdn.microsoft.com/en-gb/library/bb397895.aspx

你的代码应该是这样的:

        var res = (from sto in _context.Stores
join pro in _context.Products on sto.Type1 equals System.Data.Objects.SqlClient.SqlFunctions.StringConvert((double)pro.Type).Trim() into grpJoin
from product in grpJoin.DefaultIfEmpty()
where product.transportId == transportId
group product by product.Type1 into pt1
select new TypeTransportation()
{
Type = pt1.Key, // Needs to be int
Count = pt1.Count()
}).ToList();

关于c# - Linq Left join, where, group by, count(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35863755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com