我有以下回购方法:
public class EFX_YRelationshipRepository : IX_YRelationshipRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<X_YRelationship> Relationships
{
get
{
return context.X_Ys;
}
}
public IQueryable<X> GetAsByYID(int yID)
{
IQueryable<X>xs =
from x in context.Xs
join r in Relationships on c.XID equals r.XID
join y in context.Ys on r.YID equals y.YID
where y.YID == yID
select new X();
return xs;
}
...
我是从我的控制器调用的:
public ActionResult ListByY(int yID, int page = 1, string sort = "Name", bool desc = false)
{
IEnumerable<X> xsByY = xRelationshipRepository.GetXsByYID(yID);
ListViewModel<X> model = new ListViewModel<X>
{
Items = xsByY
.Skip((page - 1) * PageSize)
.Take(PageSize),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = xsByY.Count(),
Sort = sort,
Desc = desc
}
};
return View("_List", model);
}
我收到错误:
The entity or complex type 'Something.Domain.Concrete.X' cannot be constructed in a LINQ to Entities query.
换行:
Line 79: ListViewModel<X> model = new ListViewModel<X>
我做错了什么?
旁注:
public class EFDbContext : DbContext
{
public DbSet<Y> Ys { get; set; }
public DbSet<X> Xs { get; set; }
public DbSet<X_YRelationship> Xs_Ys { get; set; }
}
背景:
这个问题的背景是我有3个数据库表:Xs Ys和X_Ys(这是关系表btw)
我希望有一个与Y相关的X列表 ...所以我创建了3个dbSets和一个包含一个函数的关系存储库。
这个存储库有一个dbContext ...而且该函数只需要将这些X返回给我的控制器,这样我就可以将它们推送到我的视图中。
答案 0 :(得分:0)
您正在选择X的空实例而不是匹配的实体
将选择行更改为:select x;
编辑: 您不应该使用连接来遍历关系,而是使用实体上的外键属性(假设为1对1关系):
IQueryable<X>xs = context.Xs
.Where(x => x.Relationship.Any(r => r.Any(y => y.YID == yID)))