无法让我的关系存储库方法工作

时间:2014-02-14 12:41:34

标签: c# linq repository entity

我有以下回购方法:

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返回给我的控制器,这样我就可以将它们推送到我的视图中。

1 个答案:

答案 0 :(得分:0)

您正在选择X的空实例而不是匹配的实体 将选择行更改为:select x;

编辑: 您不应该使用连接来遍历关系,而是使用实体上的外键属性(假设为1对1关系):

IQueryable<X>xs = context.Xs
    .Where(x => x.Relationship.Any(r => r.Any(y => y.YID == yID)))