2015-12-16 34 views
-1

我試圖創建一個LINQ查詢來提取特定的子類型,它們在表中存儲爲字節。我已經嘗試過幾種變體,並且強制進入和退出字符串;但我無法獲得數字版本的工作。我認爲這是某種C#規則我不明白,但我不知道在哪裏看。有什麼建議麼?在「IN」子句中使用LINQ中的Contains - 字符串和字節不同

// This works okay, but doesn't makes sense to go in/out of string 

string[] subTypes = { "2", "4" };  // 2 = Clinic, 4 = SubClinic 
var clinics = from o in db.Locations 
     where subTypes.Contains(o.LocationType.ToString()) 
     select o.Name; 

// this version shows an error on the "where" clause 
// byte[] does not contain a definition for 'Contains'... 

byte[] subType = { 2, 4 };  // 2 = Clinic, 4 = SubClinic 
var clinic = from o in db.Locations 
     where subType.Contains(o.LocationType) 
     select o.Name; 
+1

定義「無法獲得[它]工作」 –

+0

什麼是財產o.LocationType的類型? – Alexei

+0

我在EF上有點生疏,是不是'where subType.Any(x => x == o.LocationType)'工作? –

回答

0

所以,當我嘗試:

byte[] subType = { 2, 4 }; 
var locationType = 2; 
Console.WriteLine(subType.Contains(locationType)); 
Console.ReadLine(); 

像你一樣,我得到了同樣的錯誤。將代碼更改爲:

byte[] subType = { 2, 4 }; 
var locationType = (byte)2; 
Console.WriteLine(subType.Contains(locationType)); 
Console.ReadLine(); 

它工作正常。有可能LocationType不是一個字節而是一個int?

+0

「無法讓它工作」我的意思是編譯器顯示關於Contains的錯誤。 我猜測tinyint類型和c#類型的byte類型不是100%兼容的,所以需要cast。 'byte [] subType = {2,4}; // 2 =診所,4 = SubClinic' 'var clinic =從db.Locations中的o' 'where subType.Contains((byte)o.LocationType)' 'select o.Name;' –

0

由於您使用的是var關鍵字,因此您的locationType變量定義爲int。

var locationType = 2; 
// Equivalent to 
int locationType = 2; 

當有任何含糊之處,使用顯式類型聲明:

byte locationType = 2; 
+0

Thank you for the回答,但我沒有聲明locationType爲var。 locationType是SQL DB表中的一個屬性,定義爲tinyint。我認爲tinyint和byte是相同的,所以我不會想到我需要一個強制tinyint轉換爲字節。你的答案是正確的,並且有幫助,除了需要在C#代碼中進行明確的輸入外,無法對數據庫的構建做任何事情。 –

+0

也許你可以改變SQL Server中列的類型,或者如果你真的存儲了一個字節 – Thomas

相關問題