我正在使用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
。
答案 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();
}