无法将值分配给列表

时间:2019-01-16 15:53:30

标签: c# asp.net-mvc linq

我正在使用MVC应用程序。这是我的模型。

public class Fruit
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public List<Colors> ColorsList { get; set; }

}

public class Colors
{
    public string ColorId { get; set; }
    public string ColorName { get; set; }
    public string ColorDescription { get; set; }
}

我在Linq中的查询:

var lstfruits = db.Fruits.Select(c => new Fruit {Id=c.Id, Name = c.Name, Description = c.Description });

foreach (var fruit in lstfruits)
{
    var lstColor = new List<Colors>();
    lstColor = db.Color.Where(f => f.FruitId == fruit.Id)
                       .Select(f => new Colors {ColorId=f.Id.ToString(), ColorName = f.Name, ColorDescription = f.Description })
                       .ToList();
    fruit.ColorsList = lstColor;
}

return lstfruits;

在查询后调试lstColor时不为空,但是对于所有元素,lstfruits的值始终为ColorsList = null。我想念什么?

我知道我的查询工作正常,因为我在调试时确实从两个查询中都获得了期望值。问题是将其分配给for循环内的fruits.ColorsList

1 个答案:

答案 0 :(得分:1)

将您的foreach转换为For循环。

for(int i=0;i<lstfruits.Count();i++)
{

    var lstColor = new List<Colors>();
    lstColor = db.Color.Where(f => f.FruitId == lstfruits[i].Id)
                       .Select(f => new Colors {ColorId=f.Id.ToString(), ColorName = f.Name, ColorDescription = f.Description })
                       .ToList();
    lstfruits[i].ColorsList = lstColor;
}

您实际上可以通过以下方式取消列表初始化:

for(int i=0;i<lstfruits.Count();i++)
{

    lstfruits[i].ColorsList = db.Color.Where(f => f.FruitId == lstfruits[i].Id)
                       .Select(f => new Colors {ColorId=f.Id.ToString(), ColorName = f.Name, ColorDescription = f.Description })
                       .ToList();

}