2011-08-18 60 views
0

我想從SQL轉換成LINQ這個表達式,但對我來說有點太難了,也許你可以幫助我這個!複雜的SQL LINQ轉換與子查詢

SELECT  TOP (2) RecipeID, UserID, Name, Servings, PreparationTime, TotalTime, DifficultyLevelID, CuisineID, DishID, MainIngredientID, PriceLevelID, FlavourID, Instructions, 
         Notes, Thumbnail, VideoLink 
FROM   dbo.Recipes 
WHERE  (RecipeID NOT IN 
          (SELECT DISTINCT Recipes_1.RecipeID 
          FROM   dbo.Allergies INNER JOIN 
                dbo.UsersAllergies ON dbo.Allergies.AllergyID = dbo.UsersAllergies.AllergyID INNER JOIN 
                dbo.IngredientsAllergies ON dbo.Allergies.AllergyID = dbo.IngredientsAllergies.AllergyID INNER JOIN 
                dbo.Ingredients ON dbo.IngredientsAllergies.IngredientID = dbo.Ingredients.IngredientID INNER JOIN 
                dbo.RecipesIngredients ON dbo.Ingredients.IngredientID = dbo.RecipesIngredients.IngredientID INNER JOIN 
                dbo.Recipes AS Recipes_1 ON dbo.RecipesIngredients.RecipeID = Recipes_1.RecipeID INNER JOIN 
                dbo.Users ON dbo.UsersAllergies.UserID = dbo.Users.UserID INNER JOIN 
                dbo.AllergyFactors ON dbo.IngredientsAllergies.AllergyFactorID = dbo.AllergyFactors.AllergyFactorID 
          WHERE  (dbo.Users.UserID = 3) AND (dbo.AllergyFactors.AllergyFactorID < 3))) 

回答

1

這將是更容易幫助你,如果你向我們展示你已經嘗試過,但像這樣的LINQ表達式應該給你相同的結果集

var query = (from rec in context.Recipes 
      where !(from al in context.Allergies 
        from ua in context.UsersAllergies.Where(x => al.AllergyID == x.AllergyID) 
        from ia in context.IngredientsAllergies.Where(x => al.AllergyID == x.AllergyID) 
        from in in context.Ingredients.Where(x => ia.IngredientID == x.IngredientID) 
        from ri in context.RecipesIngredients.Where(x => in.IngredientID == x.IngredientID) 
        from re in context.Recipes.Where(x => ri.RecipeID == x.RecipeID) 
        from us in context.Users.Where(x => ua.UserID == x.UserID) 
        from af in context.AllergyFactors.Where(x => ia.AllergyFactorID == x.AllergyFactorID) 
        where us.UserID == 3 && af.AllergyFactorID < 3 
        select re.RecipeID) 
        .Distinct() 
        .Contains(rec.RecipeID) 
      select new 
      { 
       rec.RecipeID, 
       rec.UserID, 
       rec.Name, 
       rec.Servings, 
       rec.PreparationTime, 
       rec.TotalTime, 
       rec.DifficultyLevelID, 
       rec.CuisineID, 
       rec.DishID, 
       rec.MainIngredientID, 
       rec.PriceLevelID, 
       rec.FlavourID, 
       rec.Instructions, 
       rec.Notes, 
       rec.Thumbnail, 
       rec.VideoLink 
      }).Take(2); 
+0

這個查詢壞了,你有沒有錯誤的東西可能? – laszloj

+0

@ st4rlight - 你沒有提供你的模型的任何細節,所以我盡我所能地猜出了名字。如果你想得到更準確的答案,你需要向我們展示一些你的代碼 – Aducci

+0

同時我去了一個存儲過程。謝謝你的幫助! – laszloj