我使用Entity Framework创建了一个asp.net应用程序。在此我想将记录添加到列表中。为此,我必须使用foreach循环,但它总是只为所有记录添加最后的记录数据,这意味着它显示相同的数据。在这里,我粘贴了我的代码。请验证一次并指导我可以更改的位置。
public List<CategoryItems> ListMenuCategory(int MenuId)
{
string str = string.Empty;
string strJSON = string.Empty;
List<CategoryItems> resultmenu;
resultmenu = new List<CategoryItems>();
List<CategoryItems> Result;
Result = new List<CategoryItems>();
bool check = true;
var objmenuCategory = from cat in objEntity.menucategories where cat.MenuId == MenuId && cat.Active == check select cat;
CategoryItems Categorylist = new CategoryItems();
foreach (menucategory category in objmenuCategory)
{
Categorylist.CategoryName = category.CategoryName;
Categorylist.Description = category.Description;
int menuid = category.MenuCategoryId;
List<menuitem> menuitems = GetMenucategories(menuid);
foreach (var items in menuitems)
{
Categorylist.ItemName = items.ItemName;
Categorylist.Description = items.Description;
Categorylist.Price = (float)items.Price;
string Image = items.Picture;
Categorylist.Picture = "http://restaurantmanager.testshell.net/Images/" + Image;
Categorylist.Thumbnail = "http://restaurantmanager.testshell.net/Images/" + items.Thumbnail;
if (items.CreatedDate != null)
{
Categorylist.CreatedDate = (DateTime)items.CreatedDate;
}
if (items.ModifiedDate != null)
{
Categorylist.ModifiedDate = (DateTime)items.ModifiedDate;
}
Result.Add(Categorylist);
}
// Result.AddRange(menus);
}
return Result;
}
private List<menuitem> GetMenucategories(int p)
{
restaurantEntities objEntity1 = new restaurantEntities();
var menuitems = from items in objEntity1.menuitems where items.MenuCategoryId == p select items;
return menuitems.ToList();
}
答案 0 :(得分:1)
您正在循环之外创建Categorylist
项,因此您只使用一个项目,用不同的数据填充它并将其一遍又一遍地添加到结果中。
您必须在最里面的循环内创建项目,以便每次迭代都有自己的对象。
注意:ChrisF还发现你在循环中调用AddRange
,结果是你会一遍又一遍地添加同一组项目。您根本无需致电AddRange
,您可以完全跳过Result
列表,只需返回resultmenu
。