2012-04-20 112 views
3

Possible Duplicate:
LINQ: Check whether an Array is a subset of another如何檢查char數組是否包含另一個char數組中的每個元素?

我想確定是否有辦法使用LINQ來查找子集數組中的每個元素是否在超集數組中。例如用此超集:

{'w','o','k','r','d','o'} 

下面將是一個有效的子集:

{'o','k','w','r'} 

雖然這些不會是有效的:

{'o','k','w','r','s'} 
{'w','o','k','r','d','o','s'} 

實際超集是char陣列我有記憶。實際的子集是數據庫表中的一個值。我正嘗試使用LINQ to EF來獲取滿足此條件的表中的所有值。這是我到目前爲止已經試過:

char[] letterArray = letters.ToCharArray(); 
return we.Words.Where(t =>  letterArray.Join(t.Word.ToCharArray(), 
            f => f, 
            s => s, (f, s) => new { s }).Count() == t.Word.Length 
           ).Select(t => t.Word).ToArray(); 

但是當我運行此我得到的錯誤:

'Unable to create a constant value of type 'System.Char'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.'

有沒有解決這個錯誤的方法嗎?有沒有更簡單的方法來做我在這裏嘗試的?

+0

這是因爲查詢錯誤,還是因爲LINQ到EF?你在查詢什麼底層數據存儲?這很可能不會支持諸如'ToCharArray()'等東西。 – mellamokb 2012-04-20 02:19:41

+0

如果單詞來自數組,那麼你的代碼實際上工作正常。問題是嘗試轉換爲LINQ到EF的適當查詢無法處理像ToCharArray()等東西。要麼你需要把整個單詞列表存入內存並在那裏處理,或者實現一個更復雜的解決方案,就像我在一週前回答的巧合類似的問題:http://stackoverflow.com/questions/10096744/puzzle-solving-發現所有單詞在一個較大的單詞在PHP/10096985#10096985 – mellamokb 2012-04-20 02:27:11

回答

1
char[] t1 = {'w','o','k','r','d','o'}; 

char[] t2 = {'o','k','w','r'}; 

bool isSubset = !t2.Except(t1).Any(); 
+0

這引發了我以前得到的相同的錯誤。雖然更清潔... – 2012-04-20 02:28:20

+0

沒有錯誤在我身邊。在「isSubset」中填充true – 2012-04-20 03:12:31

+0

閱讀問題和評論部分 – 2012-04-20 15:13:36

0

LINQ內置了像Except和Intersect這樣的擴展的擴展。

char[] superset = { 'w', 'o', 'k', 'r', 'd', 'o' }; 
char[] subset1 = { 'o', 'k', 'w', 'r' }; 
char[] subset2 = { 'w', 'o', 'k', 'r', 'd', 'o', 's' }; 

bool subValid1 = !subset1.Except(superset).Any(); //true 
bool subValid2 = !subset2.Except(superset).Any(); //false 
+0

這引發了我之前得到的相同錯誤。雖然...更清潔 – 2012-04-20 02:28:46

相關問題