gpt4 book ai didi

C# - 无法在 LINQ to Entities 查询中构造实体或复杂类型

转载 作者:行者123 更新时间:2023-11-30 21:52:44 25 4
gpt4 key购买 nike

我正在尝试使用 View 发送数据并将其打印出来,但由于我是 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; }
}
}

这是我在 Controller 中的功能

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);
}

他是我尝试在 View 中打印出来的方式:

@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>
}

我总是收到这个错误

The entity or complex type 'P104.Models.Locations' cannot be constructed in a LINQ to Entities query.

我找到了一些解决方案,但我很难将它们应用到我的代码中,因此它们不起作用。预先感谢您的帮助

最佳答案

你这里好像有错别字:

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# - 无法在 LINQ to Entities 查询中构造实体或复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34535961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com