【问题标题】:How to do a search in two or more tables using Join with Entity framework Lambda and Linq如何使用 Join 与实体框架 Lambda 和 Linq 在两个或多个表中进行搜索
【发布时间】:2018-10-23 15:02:56
【问题描述】:

如何搜索两个或多个表。

在我正在做的系统中,我有 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

【问题讨论】:

  • 预期结果示例?
  • 我最近回答了一个有点相关的问题。根据您实际寻找的内容,这可能会对您有所帮助。 stackoverflow.com/a/52934296/5265292
  • @ingvar 假设我想知道某艘船属于哪个类别和类型

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


【解决方案1】:

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

试试这个查询是否给你预期的结果

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&lt;T&gt; 而不是 IEnumerable&lt;T&gt;

【讨论】:

  • 是的,假设我想知道船的类别和类型,具体的船属于哪艘
  • @Jhensen 我认为,我上面给出的查询代码将给出预期的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多