C# 无法隐式转换类型';系统Linq.IQueryable<;模型>';至';型号';
我有一个操作结果,用于从视图模型填充IQueryable字段和IEnumerable字段。我可以填充其中一个,但不能在遇到此错误时同时填充两个。我需要填充这两个字段,然后将它们传递给视图。有人能帮我解决这个错误吗 视图模型:C# 无法隐式转换类型';系统Linq.IQueryable<;模型>';至';型号';,c#,C#,我有一个操作结果,用于从视图模型填充IQueryable字段和IEnumerable字段。我可以填充其中一个,但不能在遇到此错误时同时填充两个。我需要填充这两个字段,然后将它们传递给视图。有人能帮我解决这个错误吗 视图模型: public class AdminReviewViewModel { public IEnumerable<Review> Reviews { get; set; } public IQueryable Clients { get; set;
public class AdminReviewViewModel {
public IEnumerable<Review> Reviews { get; set; }
public IQueryable Clients { get; set; }
public int ClientID { get; set; }
public int ReviewID {get; set;}
public string ReviewName { get; set; }
public int? ReviewPeriodID { get; set; }
public string ReviewPeriodName { get; set; }
}
视图:
客户端ID
审查ID
评论名称
审核期间ID
审核期间名称
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.ClientID)
@DisplayFor(modelItem=>item.ReviewID)
@DisplayFor(modelItem=>item.ReviewName)
@DisplayFor(modelItem=>item.ReviewPeriodID)
@DisplayFor(modelItem=>item.ReviewPeriodName)
编辑
}
我认为您的评论是某种类型的IEnumerable
,您可以使用linq选择一个IEnumerable
如果只需要第一个元素,或者必须将模型的类型更改为IEnumerable
更新
public ActionResult Review() {
var reviews = reviewRepo.GetAllReviews();
var models = reviews.Select(s => new AdminReviewViewModel() {
ClientID = s.ClientID,
ReviewID = s.ReviewID,
ReviewName = s.ReviewName,
ReviewPeriodID = s.ReviewPeriodID,
ReviewPeriodName = s.ReviewPeriod,
Clients = clientRepo.Clients
});
return View(models);
}
表示“使模型
成为调用选择
的结果”。由于model
已定义为单个AdminReviewViewModel
,因此这没有意义
很可能您希望它更像:
public class AdminReviewViewModel
{
public int ClientID { get; set; }
public int ReviewID {get; set;}
public string ReviewName { get; set; }
public int? ReviewPeriodID { get; set; }
public string ReviewPeriodName { get; set; }
}
public class AdminReviewListViewModel
{
public IEnumerable<Review> Reviews { get; set; } // Don't know what this is for, but leaving it.
public IQueryable Clients { get; set; }
public IQueryable<AdminReviewViewModel> ReviewList { get; set; }
}
public ActionResult Review()
{
AdminReviewListViewModel model = new AdminReviewListViewModel();
model.Clients = clientRepo.Clients;
var reviews = reviewRepo.GetAllReviews();
model.ReviewList = reviews.Select(s => new AdminReviewViewModel() {
ClientID = s.ClientID,
ReviewID = s.ReviewID,
ReviewName = s.ReviewName,
ReviewPeriodID = s.ReviewPeriodID,
ReviewPeriodName = s.ReviewPeriod,
});
return View(model);
}
公共类AdminReviewViewModel
{
public int ClientID{get;set;}
public int ReviewID{get;set;}
公共字符串ReviewName{get;set;}
public int?ReviewPeriodID{get;set;}
公共字符串ReviewPeriodName{get;set;}
}
公共类AdminReviewListViewModel
{
public IEnumerable Reviews{get;set;}//不知道这是干什么用的,但离开它。
公共IQueryable客户端{get;set;}
公共IQueryable ReviewList{get;set;}
}
公共行动结果审查()
{
AdminReviewListViewModel=新的AdminReviewListViewModel();
model.Clients=clientRepo.Clients;
var reviews=reviewRepo.GetAllReviews();
model.ReviewList=审阅。选择(s=>new AdminReviewViewModel(){
ClientID=s.ClientID,
ReviewID=s.ReviewID,
ReviewName=s.ReviewName,
ReviewPeriodID=s.ReviewPeriodID,
ReviewPeriodName=s.ReviewPeriod,
});
返回视图(模型);
}
然后您就有了一个包含所选结果的模型。这不是相关代码,请显示您在哪里使用model
从哪里获得异常(在哪一行)?@HamletHakobyan我在这一行收到异常:model=model.Reviews.Select(s=>new AdminReviewViewModel(){@AndrewKilburn您得到异常是因为您试图用linq语句中的IEnumerable
覆盖类型为AdminReviewViewModel
的变量。@HamletHakobyan仍然不高兴,不幸的是他调用了“获取所有评论”方法,为什么您会认为他只想获得一次审阅?因为AdminReviewViewModel model=new AdminReviewViewModel()
@take Hi,我不想返回一条评论。我在尝试返回多条评论时多次调用模型行results@take感谢您提供最新的答案。但是,我现在只能返回评论,不能返回客户。我以前已经这样做了客户在模型中(Clients=clientRepo.Clients
?)为什么Review
的类型是IEnumerable
而不是IEnumerable
?因为Review是一个独立的实体。哦,我已经知道了你要做的事情。虽然我很感激你愿意提供帮助。它仍然返回相同的错误,但我现在要将客户端放在一个视图包中,并将它们放在一个选择列表中,然后返回re视图作为列表。谢谢
model = reviews.Select(s => new AdminReviewViewModel() {
ClientID = s.ClientID,
ReviewID = s.ReviewID,
ReviewName = s.ReviewName,
ReviewPeriodID = s.ReviewPeriodID,
ReviewPeriodName = s.ReviewPeriod,
}).FirstOrDefault();
public ActionResult Review() {
var reviews = reviewRepo.GetAllReviews();
var models = reviews.Select(s => new AdminReviewViewModel() {
ClientID = s.ClientID,
ReviewID = s.ReviewID,
ReviewName = s.ReviewName,
ReviewPeriodID = s.ReviewPeriodID,
ReviewPeriodName = s.ReviewPeriod,
Clients = clientRepo.Clients
});
return View(models);
}
model = reviews.Select(s => new AdminReviewViewModel() {
ClientID = s.ClientID,
ReviewID = s.ReviewID,
ReviewName = s.ReviewName,
ReviewPeriodID = s.ReviewPeriodID,
ReviewPeriodName = s.ReviewPeriod,
});
public class AdminReviewViewModel
{
public int ClientID { get; set; }
public int ReviewID {get; set;}
public string ReviewName { get; set; }
public int? ReviewPeriodID { get; set; }
public string ReviewPeriodName { get; set; }
}
public class AdminReviewListViewModel
{
public IEnumerable<Review> Reviews { get; set; } // Don't know what this is for, but leaving it.
public IQueryable Clients { get; set; }
public IQueryable<AdminReviewViewModel> ReviewList { get; set; }
}
public ActionResult Review()
{
AdminReviewListViewModel model = new AdminReviewListViewModel();
model.Clients = clientRepo.Clients;
var reviews = reviewRepo.GetAllReviews();
model.ReviewList = reviews.Select(s => new AdminReviewViewModel() {
ClientID = s.ClientID,
ReviewID = s.ReviewID,
ReviewName = s.ReviewName,
ReviewPeriodID = s.ReviewPeriodID,
ReviewPeriodName = s.ReviewPeriod,
});
return View(model);
}