为什么有人告诉我我的模型 属性 (id) 不存在,而它确实存在?
Why am i being told my model property (id) doesn't exist, when it does?
我有一个模型 属性 RegimeItemID
,我正在我的控制器中使用它。但是,当我尝试调用它时,它给出了一个它不存在的错误。我做错了什么?
控制器
public ActionResult ExerciseIndex(int? id, UserExerciseViewModel vmodel)
{
User user = db.Users.Find(id);
//user.RegimeItems = ChosenExercises();
UserExerciseViewModel model = new UserExerciseViewModel { AvailableExercises = GetAllExercises(), RequestedExercises = ChosenExercises(user, vmodel) };
//user.RegimeItems = db.RegimeItems.Find(model.SelectedExercise);
user.RegimeItems = model.RequestedExercises;
return View(model);
}
private List<RegimeItem> ChosenExercises(User user, UserExerciseViewModel model)//RegimeItem regimeItem)//User user, RegimeItem regimeItem)
{
return db.Users.Where(r => r.RegimeItems.RegimeItemID == user.UserID).ToList();
}
型号
public class User
{
public int UserID { get; set; }
public ICollection<RegimeItem> RegimeItems { get; set; }
public User()
{
this.RegimeItems = new List<RegimeItem>();
}
}
public class RegimeItem
{
public int RegimeItemID { get; set; }
public Exercise RegimeExercise { get; set; }
}
ViewModel
public class UserExerciseViewModel
{
public List<Exercise> AvailableExercises { get; set; }
public List<RegimeItem> RequestedExercises { get; set; }
public int? SelectedExercise { get; set; }
public int[] AvailableSelected { get; set; }
public int[] RequestedSelected { get; set; }
public string SavedRequested { get; set; }
}
我收到错误:
'System.Collections.Generic.ICollection<Project.Model.RegimeItem>' does not contain a definition for 'RegimeItemID' and no extension method 'RegimeItemID' accepting a first argument of type 'System.Collections.Generic.ICollection<Project.Model.RegimeItem>' could be found (are you missing a using directive or an assembly reference?)
我在控制器的这一行得到它:
return db.Users.Where(r => r.RegimeItems.RegimeItemID == user.UserID).ToList();
RegimeItems
是 collection 的 RegimeItem
元素 - 它不是 single 元素,所以它不是没有一个 ID。
听起来你可能想要这样的东西:
return db.Users
.Where(r => r.RegimeItems.Any(ri => ri.RegimeItemID == user.UserID))
.ToList();
这将找到拥有 any 制度项目且制度项目 ID 等于其用户 ID 的用户。虽然还不清楚这是否是一个 合理的 查询 - 为什么制度项目 ID 等于用户 ID?它也没有正确的 return 类型——那将是 return User
的列表,而不是 RegimeItem
s.
您似乎更有可能想要这样的东西:
return db.Users
.Where(u => u.UserID == user.UserID)
.SelectMany(u => u.RegimeItems)
.ToList();
或者可能:
return db.Users
.Where(u => u.UserID == user.UserID)
.Single()
.RegimeItems
.ToList();
(你应该看看每个案例涉及的查询。)
我有一个模型 属性 RegimeItemID
,我正在我的控制器中使用它。但是,当我尝试调用它时,它给出了一个它不存在的错误。我做错了什么?
控制器
public ActionResult ExerciseIndex(int? id, UserExerciseViewModel vmodel)
{
User user = db.Users.Find(id);
//user.RegimeItems = ChosenExercises();
UserExerciseViewModel model = new UserExerciseViewModel { AvailableExercises = GetAllExercises(), RequestedExercises = ChosenExercises(user, vmodel) };
//user.RegimeItems = db.RegimeItems.Find(model.SelectedExercise);
user.RegimeItems = model.RequestedExercises;
return View(model);
}
private List<RegimeItem> ChosenExercises(User user, UserExerciseViewModel model)//RegimeItem regimeItem)//User user, RegimeItem regimeItem)
{
return db.Users.Where(r => r.RegimeItems.RegimeItemID == user.UserID).ToList();
}
型号
public class User
{
public int UserID { get; set; }
public ICollection<RegimeItem> RegimeItems { get; set; }
public User()
{
this.RegimeItems = new List<RegimeItem>();
}
}
public class RegimeItem
{
public int RegimeItemID { get; set; }
public Exercise RegimeExercise { get; set; }
}
ViewModel
public class UserExerciseViewModel
{
public List<Exercise> AvailableExercises { get; set; }
public List<RegimeItem> RequestedExercises { get; set; }
public int? SelectedExercise { get; set; }
public int[] AvailableSelected { get; set; }
public int[] RequestedSelected { get; set; }
public string SavedRequested { get; set; }
}
我收到错误:
'System.Collections.Generic.ICollection<Project.Model.RegimeItem>' does not contain a definition for 'RegimeItemID' and no extension method 'RegimeItemID' accepting a first argument of type 'System.Collections.Generic.ICollection<Project.Model.RegimeItem>' could be found (are you missing a using directive or an assembly reference?)
我在控制器的这一行得到它:
return db.Users.Where(r => r.RegimeItems.RegimeItemID == user.UserID).ToList();
RegimeItems
是 collection 的 RegimeItem
元素 - 它不是 single 元素,所以它不是没有一个 ID。
听起来你可能想要这样的东西:
return db.Users
.Where(r => r.RegimeItems.Any(ri => ri.RegimeItemID == user.UserID))
.ToList();
这将找到拥有 any 制度项目且制度项目 ID 等于其用户 ID 的用户。虽然还不清楚这是否是一个 合理的 查询 - 为什么制度项目 ID 等于用户 ID?它也没有正确的 return 类型——那将是 return User
的列表,而不是 RegimeItem
s.
您似乎更有可能想要这样的东西:
return db.Users
.Where(u => u.UserID == user.UserID)
.SelectMany(u => u.RegimeItems)
.ToList();
或者可能:
return db.Users
.Where(u => u.UserID == user.UserID)
.Single()
.RegimeItems
.ToList();
(你应该看看每个案例涉及的查询。)