我有一个与MVC连接查询的问题,我不知道为什么.
The entity or complex type ‘Tusofona_Website.Models.site_noticias’ cannot be constructed in a LINQ to Entities query.
我的控制器:
private TusofonaDBs db = new TusofonaDBs(); // // GET: /DestaquesMain/ public ActionResult Index() { var query = (from sd in db.site_desquesnoticias join sn in db.site_noticias on sd.IDNoticia equals sn.IDNoticia where sn.Destaque == 1 select new site_noticias { CorpoNoticia = sn.CorpoNoticia,TituloNoticia = sn.TituloNoticia }).ToList(); //return View(db.site_desquesnoticias.ToList()); return View(query); }
我的型号:
public class site_destaquesnoticias { [Key] public Int32 IDDestaque { get; set; } public Int32 IDNoticia { get; set; } public string Foto { get; set; } } public class site_noticias { [Key] public Int32 IDNoticia { get; set; } public string CorpoNoticia { get; set; } public string TituloNoticia { get; set; } public string Foto { get; set; } public Int32 Destaque { get; set; } } public class TusofonaDBs : DbContext { public DbSet<site_destaquesnoticias> site_desquesnoticias { get; set; } public DbSet<site_noticias> site_noticias { get; set; } }
有人可以帮帮我吗?
解决方法
您无法投影到映射的实体(请参阅
this答案).
但是,您可以做以下几件事:
1)选择匿名类型而不是实体,如:
var query = (from sd in db.site_desquesnoticias join sn in db.site_noticias on sd.IDNoticia equals sn.IDNoticia where sn.Destaque == 1 select new { CorpoNoticia = sn.CorpoNoticia,TituloNoticia = sn.TituloNoticia }).ToList();
2)反转您的查询以直接选择site_noticias.这取决于您要检索的查询和数据.例如,您可以查看以下内容是否有效并为您提供所需的数据:
var query = (from sd in db.site_desquesnoticias join sn in db.site_noticias on sd.IDNoticia equals sn.IDNoticia where sn.Destaque == 1 select sn).ToList();
3)使用一些DTO(数据传输对象)将要选择的属性投影到:
public class SiteNoticiasDTO{ public string CorpoNoticia {get;set;} public string TituloNoticia {get;set;} } var query = (from sd in db.site_desquesnoticias join sn in db.site_noticias on sd.IDNoticia equals sn.IDNoticia where sn.Destaque == 1 select new SiteNoticiasDTO { CorpoNoticia = sn.CorpoNoticia,TituloNoticia = sn.TituloNoticia }).ToList();