gpt4 book ai didi

c# - 嵌套 linq 查询中的“列名 [ColumnName] 无效”

转载 作者:行者123 更新时间:2023-11-30 13:05:22 24 4
gpt4 key购买 nike

最后更新

经过大量测试,我意识到如果我在 SQL 2000 和 SQL 2005 上对同一数据集(在本例中为 Northwind)表运行相同的查询,我会得到两个不同的结果。在 SQL 2000 上,我得到问题中的错误。在 SQL 2005 上,它成功了。

所以我得出结论,由 linqpad 生成的查询在 sql 2000 上不起作用。要重现这一点,请运行:

OrderDetails
.GroupBy(x=>x.ProductID)
.Select(x=>new {product_id = x.Key, max_quantity = x.OrderByDescending(y=>y.UnitPrice).FirstOrDefault().Quantity}).Dump();

在 sql 2000 中的 Northwind 数据库上。sql 翻译是:

SELECT [t1].[ProductID] AS [product_id], (
SELECT [t3].[Quantity]
FROM (
SELECT TOP 1 [t2].[Quantity]
FROM [OrderDetails] AS [t2]
WHERE [t1].[ProductID] = [t2].[ProductID]
ORDER BY [t2].[UnitPrice] DESC
) AS [t3]
) AS [max_quantity]
FROM (
SELECT [t0].[ProductID]
FROM [OrderDetails] AS [t0]
GROUP BY [t0].[ProductID]
) AS [t1]

原始问题

我有以下查询:

ATable
.GroupBy(x=> new {FieldA = x.FieldAID, FieldB = x.FieldBID, FieldC = x.FieldCID})
.Select(x=>new {FieldA = x.Key.FieldA, ..., last_seen = x.OrderByDescending(y=>y.Timestamp).FirstOrDefault().Timestamp})

结果:

SqlException: Invalid column name 'FieldAID' x 5
SqlException: Invalid column name 'FieldBID' x 5
SqlException: Invalid column name 'FieldCID' x 1

我发现它与最后一次对 Timestamp 的查询有关,因为它有效:

ATable
.GroupBy(x=> new {FieldA = x.FieldAID, FieldB = x.FieldBID, FieldC = x.FieldCID})
.Select(x=>new {FieldA = x.Key.FieldA, ..., last_seen = x.OrderByDescending(y=>y.Timestamp).FirstOrDefault()})

查询已被简化。目的是按一组变量进行分组,然后显示该分组最后一次在数据库中发生的时间。

我正在使用 Linqpad 4 生成这些结果,因此时间戳为我提供了一个字符串,而 FirstOrDefault 为我提供了不理想的整个对象。

更新
在进一步测试中,我注意到 SQLException 的数量和类型与 groupby 子句中创建的类有关。所以,

ATable
.GroupBy(x=> new {FieldA = x.FieldAID})
.Select(x=>new {FieldA = x.Key.FieldA, last_seen = x.OrderByDescending(y=>y.Timestamp).FirstOrDefault()})

结果

SqlException: Invalid column name 'FieldAID' x 5

最佳答案

您应该使用 SQL 分析器来检查针对 2 个数据库生成的 SQL 是否不同。

我们只遇到过两个问题,有些东西在 SQL Server 2005 上运行,但在 SQL Server 2000 上运行不了。在这两种情况下,都是由于 SQL Server 2000 中缺少对多事件结果集 (MARS) 的支持。在一种情况下它导致锁定数据库,在另一种情况下导致性能下降。

关于c# - 嵌套 linq 查询中的“列名 [ColumnName] 无效”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5239690/

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