将sqlserver中的一段sql转换为sqlsugar的queryable,提示“列名不明确” 返回

原sql:
SELECT SKU
FROM RB_Product WITH (NOLOCK)
WHERE CustomerID = 1
AND SKU IN
(
SELECT p.SKU
FROM RB_Product p WITH (NOLOCK)
LEFT JOIN RB_Product_GroupSku g WITH (NOLOCK)
ON p.SKU = g.SKU
AND g.CustomerID = p.CustomerID
WHERE p.CustomerID = 1
AND p.DeleteStatus = 0
AND p.SKU = ''
GROUP BY p.SKU
);
转换后:
var query = _productRepository.GetQueryable()
.With(SqlWith.NoLock)
.Where(p => p.CustomerID == request.CustomerId);
if (request.IsSingleGroupSKU == 0)
{
query.Where(p => p.SKU == SqlFunc.Subqueryable<RB_Product>()
.LeftJoin<RB_Product_GroupSku>((p2, g) => p2.CustomerID == g.CustomerID && p2.SKU == g.SKU)
.Where(p2 => p2.CustomerID == request.CustomerId && p2.DeleteStatus == 0 && p2.SKU == request.SKU).GroupBy(p2 => p2.SKU).Select(p2 => p2.SKU));
}
var data = await query.Select(p => p.SKU).Distinct().ToListAsync();
报错信息:
Microsoft.Data.SqlClient.SqlException (0x80131904): 列名 'SKU' 不明确。
该怎么处理?有没有大佬提示下
热忱回答(21)
-
fate sta VIP0
2周前.Distinct() 扔select前面看看
0 回复 -
sanchez VIP0
2周前@fate sta:试了,不行,感觉不是这个原因导致的
0 回复 -
fate sta VIP0
2周前你这个是什么数据库,你上面的SQL不像ORM生成的
0 回复 -
fate sta VIP0
2周前用AOP把监控的SQL发出来,并且提供具体是什么数据库
0 回复 -
fate sta VIP0
2周前还有实体类也发一下
0 回复 -
fate sta VIP0
2周前RB_Product_GroupSku RB_Product 还有主表
0 回复 -
sanchez VIP0
2周前@fate sta:上面的sql是 go写的,现在要用sqlsugar重写
0 回复 -
sanchez VIP0
2周前@fate sta:sqlserver,好,我先用aop看看
0 回复 -
sanchez VIP0
2周前@fate sta:实体类字段有点多。。我截取这里用到的
0 回复 -
sanchez VIP0
2周前SELECT DISTINCT
[SKU] AS [SKU]
FROM [RB_Product] p WITH (NOLOCK)
WHERE ([CustomerID] = 1)
AND [SKU] IN
(
SELECT [SKU]
FROM [RB_Product] [p2]
LEFT JOIN [RB_Product_GroupSku] [g]
ON (
([p2].[CustomerID] = [g].[CustomerID])
AND ([p2].[SKU] = [g].[SKU])
)
WHERE (
(
([p2].[CustomerID] = 1)
AND ([p2].[DeleteStatus] = 0)
)
AND ([p2].[SKU] = '1367060')
)
GROUP BY [SKU]
);
查出来了,最后的group by 有问题,大佬看下怎么改
0 回复 -
sanchez VIP0
2周前.GroupBy(p2 => p2.SKU)
我在分组的时候是有用别名的,但生成出来的没有。
0 回复 -
sanchez VIP0
2周前还有就是:最上面的select sku那里也有问题
0 回复 -
sanchez VIP0
2周前0 回复 -
sanchez VIP0
2周前感觉我自己写得没问题,是底层的问题么?
0 回复 -
fate sta VIP0
2周前@sanchez:太过复杂,你需要提供实体类我来写个DEMO重现,或者你控制台写个能重现的DEMO发我
0 回复 -
fate sta VIP0
2周前生成的SQL我也没看出哪错了
0 回复 -
sanchez VIP0
2周前@fate sta:这个sql是我改过的,我红框标出来的地方就没有q2别名导致报错的
原始sql是这样:
SELECT DISTINCT
[SKU] AS [SKU]
FROM [RB_Product] p WITH (NOLOCK)
WHERE ([CustomerID] = 1)
AND [SKU] IN
(
SELECT [SKU]
FROM [RB_Product] [p2]
LEFT JOIN [RB_Product_GroupSku] [g]
ON (
([p2].[CustomerID] = [g].[CustomerID])
AND ([p2].[SKU] = [g].[SKU])
)
WHERE (
(
([p2].[CustomerID] = 1)
AND ([p2].[DeleteStatus] = 0)
)
AND ([p2].[SKU] = '1367060')
)
GROUP BY [SKU]
);
0 回复 -
fate sta VIP0
2周前没看到哪里有红圈
0 回复 -
fate sta VIP0
2周前看到了 ,这边晚点我验证一下能不能重现了
0 回复 -
fate sta VIP0
2周前sqlsugar不是最新记得先升级最新
0 回复 -
sanchez VIP0
2周前验证得怎么样了大佬
0 回复