【发布时间】:2016-03-08 09:37:16
【问题描述】:
我需要在 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 但似乎无法使其工作。
【问题讨论】:
-
将连接更改为左连接不起作用?
-
您的预期输出中的第三行不应该是
| 3 | 3 | 2?? -
linq 中没有左连接
-
Utsav,不,因为我一次只搜索一个特定的 transportId。在这种情况下为 5。因此只有 1 类型为 3。