[英]Why am i being told my model property (id) doesn't exist, when it does?
I have a model property RegimeItemID
which I am using in my controller. 我有一个在控制器中使用的模型属性RegimeItemID
。 However, when I am trying to call it, it is giving an error that it doesnt exist. 但是,当我尝试调用它时,它给出了一个不存在的错误。 What have I done wrong? 我做错了什么?
Controller 控制者
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();
}
Models 楷模
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; }
}
I am getting the error: 我收到错误消息:
'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?)
I am getting it on this line in the controller: 我在控制器的这一行上得到它:
return db.Users.Where(r => r.RegimeItems.RegimeItemID == user.UserID).ToList();
RegimeItems
is a collection of RegimeItem
elements - it's not a single element, so it doesn't have a single ID. RegimeItems
是RegimeItem
元素的集合 -它不是单个元素,因此没有单个ID。
It sounds like you may want something like: 听起来您可能想要以下内容:
return db.Users
.Where(r => r.RegimeItems.Any(ri => ri.RegimeItemID == user.UserID))
.ToList();
That will find users who have any regime items with a regime item ID equal to their user ID. 这将查找具有任何方案项目ID等于其用户ID的方案项目的用户。 It's not really clear whether that's a sensible query though - why would a regime item ID be equal to a user ID? 不过,目前还不清楚这是否是一个明智的查询-为何制度项ID等于用户ID? It also doesn't have the right return type - that's going to return a list of User
s, not RegimeItem
s. 它也没有正确的返回类型-这将返回User
列表,而不是RegimeItem
列表。
It seems more likely that you want something like: 您似乎更想要以下内容:
return db.Users
.Where(u => u.UserID == user.UserID)
.SelectMany(u => u.RegimeItems)
.ToList();
Or possibly: 或可能:
return db.Users
.Where(u => u.UserID == user.UserID)
.Single()
.RegimeItems
.ToList();
(You should look at the queries involved in each case.) (您应该查看每种情况下涉及的查询。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.