C# LINQ-2-SQL和';char';价值观

C# LINQ-2-SQL和';char';价值观,c#,linq-to-sql,C#,Linq To Sql,我有以下LINQ到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 &

我有以下LINQ到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
}   
“BreakdownType”字段在SQL Server 2008中为“char(1)”类型。由于某些原因,查询不会返回原来的结果。为了让它返回结果,我需要将前两行更改为以下内容,我认为这会降低查询速度:

from cms in ConsignmentMarginBreakdowns.Where(a => a.BreakdownType.ToString() == "S")
from cmc in ConsignmentMarginBreakdowns.Where(a => a.BreakdownType.ToString() == "C")
这是为什么?

您说,“在SQL Server 2008中,'BreakdownType'字段是
char(1)
类型”,这意味着它是一个“长度为n字节的固定长度非Unicode字符数据”(在您的案例1中),实际上并不是因为长度为1就说它是“char”


请参阅。

LINQ到SQL数据类型的映射说明SQL中的字符字段映射到LINQ中的字符串。因此,在使用字符串之前必须将其转换为字符串。

对于不起作用的查询。。。生成了什么TSQL?(使用sql跟踪,或设置
cms.Log=Console.Out;
或类似设置)我可以知道datacontext类中
BreakdownType
的数据类型是什么吗