LINQ-2-SQL and 'char' values

本文关键字:values char and LINQ-2-SQL | 更新日期: 2023-09-27 18:16:15

我有以下LINQ-to-SQL查询:

from cms in ConsignmentMarginBreakdowns.Where(a => a.BreakdownType == 'S')
from cmc in ConsignmentMarginBreakdowns.Where(a => a.BreakdownType == 'C')
where cms.TripNumber == cmc.TripNumber && cms.Depot == cmc.Depot && cms.TripDate == cmc.TripDate
select new
{
    NTConsignment = cms.NTConsignment,
    Depot = cms.Depot,
    TripNumber = cms.TripNumber,
    TripDate = cms.TripDate,
    Sales = cms.Value,
    Costs = cmc.Value,
    Margin = cms.Value - cmc.Value
}   

在SQL Server 2008中'BreakdownType'字段是'char(1)'类型。由于某种原因,查询没有返回任何结果。为了让它返回结果,我需要将前两行更改为以下内容,我认为这会降低查询的速度:

from cms in ConsignmentMarginBreakdowns.Where(a => a.BreakdownType.ToString() == "S")
from cmc in ConsignmentMarginBreakdowns.Where(a => a.BreakdownType.ToString() == "C")

为什么会这样?

LINQ-2-SQL and 'char' values

你说,"'BreakdownType'字段是SQL Server 2008中的char(1)类型",这意味着它是一个"固定长度,非unicode字符数据,长度为n字节"(在你的情况下1),它实际上并没有说它是一个"字符",只是因为长度为1。

参见MSDN文档

LINQ到SQL数据类型的映射表示SQL中的char字段映射到LINQ中的字符串。所以你必须在使用它之前转换成字符串