2012-01-22 68 views
0

在數據庫表上有一列類型爲char(2)的列。在.NET Entity Framework中使用字符串屬性時,如何控制SQL查詢參數的類型

當我在LINQ中使用參數(如.Where(x => x.Code == code))時,SQL查詢參數被轉換爲varchar(max),我真的很喜歡它是char(2)以避免隱式轉換。這是因爲查詢沒有按照我想要的方式使用數據庫的索引。

Property(c => c.Code) 
      .HasColumnType("char") 
      .IsFixedLength() 
      .HasMaxLength(2); 

代碼優先映射如上所示。似乎影響翻譯的唯一東西是.HasColumnType("char")它似乎不影響查詢翻譯,因爲它影響它是否選取varchar(max)nvarchar(max)

我想到了兩種解決方案,一種是更改數據庫,以便使用int和查找來代替char代碼,另一種是將代碼轉換爲使用表達式。兩件事我寧願不要做,如果有更好的方法來控制映射到SQL。

回答

0

我想出了一個方法來實現這一點。

而不是使用.Where(x => x.Code = code)

我現在用的

var codes = new string[] { code } 

...

.Where(x => codes.Contains(x.Code)) 

這轉化爲常量查詢,而不是一個參數。

相關問題