如何使用“使用实体框架联接Lambda和Linq

时间:2018-10-23 15:02:57

标签: c# asp.net .net entity-framework

如何搜索两个或多个表。

在我正在使用的系统中,我有BoatTypeOfBoatClassBoat表。

我的映射如下:

HasRequired(c => c.ClassBoat )
            .WithMany(c => c.Boat)
            .HasForeignKey(c => c.ClassBoatId);

HasRequired(c => c.TypeOfBoat)
            .WithMany(c => c.Boat)
            .HasForeignKey(c => c.TypeOfBoatId);

我建立了用于搜索的通用存储库

    public virtual IEnumerable<TEntity> Search(Expression<Func<TEntity, bool>> predicate)
    {
        return Dbset.Where(predicate);
    }

我使用通用的接口存储库对船进行特定搜索,下面是一些示例:

    public IEnumerable<Boat> GetByActive()
    {
        return Search(c => c.Active && !c.excluded);          
    }

    public Boat GetByName(string name)
    {
       return Search(c => c.Name== name).FirstOrDefault();
    }

如果我要获取TypeOfBoatClassBoat这两个不同的表,但它们与Boat表相关,该怎么办?

我的想法是将这些数据显示在表格中

这是我数据库的SS。

Database

1 个答案:

答案 0 :(得分:0)

您的意思是包括船的相关记录吗?

尝试此查询是否能为您带来预期的结果

public Boat GetByName(string name)
{
   var boat = DbContext.Boat
             .Include(boat => boat.ClassBoat)
             .Include(boat => boat.TypeOfBoat)
             .FirstOrDefault(boat => boat.Name == name);

   return boat;
}

如果要使用通用存储库然后扩展查询,则应返回IQueryable<T>而不是IEnumerable<T>