【发布时间】:2011-11-03 06:17:44
【问题描述】:
我有一个 Premiums 表,我尝试使用以下 LINQ-to-SQL 进行查询:
var premiums = sourcePolicyContext.Premiums.Where(prm => prm.Policy_Number == "07748106");
这将对数据库运行以下 SQL:
exec sp_executesql N'SELECT [t0].[Policy Number] AS [Policy_Number], ' +
'[t0].[PremiiumType] AS [Premiium_Type], [t0].[Number], ' +
'[t0].[Effective Date] AS [Effective_Date], ' +
'[t0].[Entry Date] AS [Entry_Date], ' +
'[t0].[Collision Premium] AS [Collision_Premium], ' +
'[t0].[Non Collision Premium] AS [Non_Collision_Premium], ' +
'[t0].[Tow Premium] AS [Tow_Premium], ' +
'[t0].[Other Coverage1 Premium] AS [Other_Coverage1_Premium] ' +
'FROM [dbo].[Premium Table] AS [t0]' +
'WHERE [t0].[Policy Number] = @p0',
N'@p0 nvarchar(4000)',
@p0=N'07748106'
此查询在直接运行时返回两行,如预期的那样。它还会产生两个 LINQ to SQL 实体,但是这两个实体中的数据只是 SQL 查询结果中第一行的副本。为什么会发生这种情况?
【问题讨论】:
-
使用
premiums的代码是什么样的? -
代码只是测试行。我将其设置断点并通过扩展结果来强制评估查询。我正在测试它,因为我在系统中的其他地方有代码迭代父表到溢价,并迭代该父表中的每个溢价,然后使用溢价值来执行计算。由于这种行为,计算产生了无效结果。
-
为什么查询直接运行会返回两行?
-
因为查询
select * from [dbo].[Premium Table] where [Policy Number] = '07748106'返回两行。该查询和存储过程返回的两行彼此不同。不同的保费值、不同的保费类型等...但是 LINQ-to-SQL 似乎识别出有两个结果,但仅使用来自第一个返回行的数据填充两个结果实体。 -
你的表中哪一列是主键?
标签: c# sql linq linq-to-sql