我试图发送带有视图的数据并打印出来,但是由于我对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/

10-11 05:54