linq语法:这返回的类型是什么?我现在怎样才能继续使用firstRow.ingredientName等?

问题描述 投票:-6回答:1

以下是我的linq表达式:

return from c in db.RecipeIngredients
       join d in db.Ingredients on c.IngredientID equals d.IngredientsID
       where c.RecipeID.Equals(recipeID)
       select (d.IngredientsID,c.Unit,c.IngredientID,c.Amount).ToList();

这应该返回一系列成分信息。这会返回什么类型?我现在怎样才能继续使用firstRow.ingredientName等?

c# linq
1个回答
5
投票

首先,我认为你的代码不会编译,你错过了两个括号:

return (from c in db.RecipeIngredients
   join d in db.Ingredients on c.IngredientID equals d.IngredientsID
   where c.RecipeID.Equals(recipeID)
   select (d.IngredientsID,c.Unit,c.IngredientID,c.Amount)).ToList();

好的,接下来,(d.IngredientsID,c.Unit,c.IngredientID,c.Amount)如果你在C#7.0上是一个包含所有变量的声明元组,那么你需要在括号之间返回这些类型,就像这里一样(我将假设你的vars的类型,根据需要纠正它):

public List<(int, UnitNames, int, double)> GetRecipe(int recipeId)
{
    return (from c in db.RecipeIngredients
       join d in db.Ingredients on c.IngredientID equals d.IngredientsID
       where c.RecipeID.Equals(recipeID)
       select (d.IngredientsID,c.Unit,c.IngredientID,c.Amount)).ToList();

}

要访问您访问的变量,请执行以下操作:

var recipe = GetRecipe(recipeId);

foreach(var ingredient in recipe)
{
    var ingredientsId = ingredient.Item1;
    var unit = ingredient.Item2;
    var ingredientId = ingredient.Item3;
    var amount = ingredient.Item4;
}

无论如何,我建议创建一个传递数据的类,它将产生一个非常清晰的代码:

public class Ingredient
{
    public int IngredientsId { get; set; }
    public UnitNames Unit { get; set; }
    public int IngredientId { get; set; }
    public double Amount { get; set; }
}

public List<Ingredient> GetRecipe(int recipeId)
{
    return (from c in db.RecipeIngredients
       join d in db.Ingredients on c.IngredientID equals d.IngredientsID
       where c.RecipeID.Equals(recipeID)
       select new Ingredient { 
                                 IngredientsId = d.IngredientsID, 
                                 Unit = c.Unit,
                                 IngredientId = c.IngredientID, 
                                 Amount = c.Amount 
                             }).ToList();

}
© www.soinside.com 2019 - 2024. All rights reserved.