我试图发送带有视图的数据并打印出来,但是由于我对C#并不熟悉,所以我非常努力。
所以这是我的模型ViewModel:
namespace P104.Models
{
public class ViewModel
{
}
public class Location
{
public int loc_id { get; set; }
public string loc_name { get; set; }
}
public class Competentie
{
public int Comp_id { get; set; }
public string competentie { get; set; }
}
public class MyViewModel
{
public User User { get; set; }
public IEnumerable<Locations> Locations { get; set; }
public IEnumerable<Competenties> Competenties { get; set; }
}
}
这是我在控制器中具有的功能
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
User user = db.user.Find(id);
if (user == null)
{
return HttpNotFound();
}
var competenties =
from usercomp in dbE.UserComp
join comp in dbE.Competenties on usercomp.fk_Comp_id equals comp.comp_id
where usercomp.fk_user_id == id
select new Competenties { competentie = comp.competentie };
var locations =
from userloc in dbE.UserLoc
join loc in dbE.Locations on userloc.fk_location_id equals loc.loc_id
where userloc.fk_user_id == id
select new Locations { loc_name = loc.loc_name };
var model = new MyViewModel
{
User = user,
Locations = locations.ToList(), // eagerly fetch the data that will be needed in the view
Competenties = competenties.ToList(), // eagerly fetch the data that will be needed in the view
};
return View(model);
}
他就是我尝试在视图中将其打印出来的方式:
@foreach (var location in Model.Locations)
{
<dt>@location.locname</dt>
<dd>@location.locname</dd>
}
@foreach (var competentie in Model.Competenties)
{
<dt>@competentie.competentie</dt>
<dd>@competentie.competentie</dd>
}
我总是收到这个错误
实体或复杂类型“ P104.Models.Locations”不能为
在LINQ to Entities查询中构造。
我找到了一些解决方案,但是我正在努力将它们应用到我的代码中,因此它们不起作用。
在此先感谢您的帮助
最佳答案
您似乎在这里有错别字:
select new Locations { loc_name = loc.loc_name };
应该是:
select new Location { loc_name = loc.loc_name };
您要针对的模型称为
Location
,而不是Locations
。目前尚不清楚Locations
模型是什么,因为您尚未在问题中显示该模型。当然可以相应地调整您的视图:
@foreach (var location in Model.Locations)
{
<dt>@location.loc_name</dt>
<dd>@location.loc_name</dd>
}
顺便说一句,我将建议您遵循标准的C#命名约定。该约定规定,在C#中,属性名称应以大写字母开头,并且不包含
_
。因此,基本上,您宁愿使用LocationName
或仅使用Name
而不是loc_name
。与您的Competentie
模型相同。关于c# - C#-无法在LINQ to Entities查询中构造实体或复杂类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34535961/