2011-12-01 37 views
0

我有以下LINQ到SQL查詢:LINQ-2-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' 字段是 '字符(1)' 式中的SQL Server 2008。由於某種原因,查詢沒有按照原樣返回結果。爲了得到它帶回的結果,我需要改變前2線以下,這是我想象降低了查詢的速度:

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

這是爲什麼?

+1

對於沒有工作的查詢...生成了什麼TSQL? (或者使用sql trace,或者設置'cms.Log = Console.Out;'或類似的) –

+0

我可以知道你的datacontext類中的BreakdownType的數據類型是什麼 – FosterZ

回答

0

你說:「'BreakdownType'字段在SQL Server 2008中是char(1)類型」,這意味着它是一個「長度爲n字節的固定長度,非Unicode字符數據」(在你的情況1 ),實際上並不是說因爲長度爲1而是「char」。

請參閱MSDN Docs

0

LINQ to SQL數據類型的映射表明SQL中的char字段被映射到LINQ中的字符串。所以你必須在使用它之前轉換爲字符串。