C# LINQ-2-SQL和';char';价值观
我有以下LINQ到SQL查询: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 &
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
的数据类型是什么吗