2017-04-03 54 views
0

我想轉換查詢語法流利的語法,但我不能這樣做。我不知道我可以在這段代碼中使用流利語法中的兩個子句「where」嗎?如何將查詢語法轉換爲流利的語法?

public static void Ex6() 
{ 
    string[] csvRecipes = { "milk,sugar,eggs", "flour,BUTTER,eggs", "vanilla,ChEEsE,oats" }; 
    var dairQuery= 
     from csvRecipe in csvRecipes 
     let ingredients = csvRecipe.Split(',') 
     from ingredient in ingredients 
     let uppercaseIngredient=ingredient.ToUpper() 
     where uppercaseIngredient =="MILK" || 
     uppercaseIngredient == "BUTTER" || 
     uppercaseIngredient == "CHEESE" 
     select uppercaseIngredient; 
    foreach (var item in dairQuery) 
    { 
     Console.WriteLine("{0} is dairy", item); 
    } 
} 
+2

注意'join's在查詢語法特別乾淨。如果你只是把它作爲一種學習練習,那就沒問題,但不要討厭使用其中一種。 –

+1

爲此使用Linqpad。 –

回答

0

我覺得這確實好看多了,你想要什麼。

var query = csvRecipes.Select(x => x.Split(',')) 
         //flatten the list 
         .SelectMany(y => y) 
         //ToUppercase Again 
         .Select(x => x.ToUpper()) 
         .Where(i => i == "MILK" || 
            i == "BUTTER" || 
            i == "CHEESE"); 

如果要比較字符串忽略序的情況下,你可以使用i => i.Equals("MILK", StringComparison.OrdinalIgnoreCase)

0

我可以用兩個條款「其中」在此代碼流利的語法?

你可以連續Where條款,但後來他們都被解釋爲AND條款,而不是OR條款(因爲數據必須通過所有Where過濾器)。

適當的方式來轉換where子句來一口流利的將是:

.Where(item => item.uppercaseIngredient == "MILK" || 
       item.uppercaseIngredient == "BUTTER" || 
       item.uppercaseIngredient == "CHEESE") 

另外,您可以使用的物品的集合與Contains

var validTypes = new string[] { "MILK", "BUTTER", "CHEESE"}; 

... 
.Where(item => validTypes.Contains(item.uppercaseIngredient)) 
0

我會使用一個集合,其中您儲存你想要選擇的成分。然後你可以使用SelectMany找到所有匹配的令牌這個簡潔查詢:

string[] ingredients = new[] { "MILK", "BUTTER", "CHEESE" }; 
var dairQuery = csvRecipes 
    .SelectMany(r => r.Split(',').Select(i => i.ToUpper()).Where(ingredients.Contains)); 
相關問題