如何根据INCLUDEd表中的条件选择列

时间:2019-05-09 08:30:38

标签: c# entity-framework

我要根据表1中选择的每一行的ID从sql数据库表1中选择一组数据,我包括表2中具有相同ID的所有行,对于我只想选择的那些行表2中的行(其中表列(移动)的值为1

这是与实体框架相关的,这是下面的查询

List<Event> queryEvents;
using (var context = new Entities())
{
   queryEvents = context.Events.Where(s => s.IsActive == (byte?) RecordTypeEnum.Active)
                    .Include(s => s.EventOwner).Include(x => x.EventTickets.Any(y => y.AvailableInventory >= 1))
                    .Where(g => g.IsActive != null && g.EventOwner.IsActive == true)
                    .OrderByDescending(h => h.EventOwnerId).ThenBy(j => j.Title).ToList();
}

错误消息-

  

包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用“选择”运算符作为集合导航属性。   参数名称:路径

我想从table1中选择IsActive(列)== 1的所有记录,并从table2中选择table1 id = table2 id并在表2中AvailableInventory(列)== 1的所有记录

2 个答案:

答案 0 :(得分:0)

不支持条件包含。但是您可以通过以下代码实现您的目标;

  queryEvents = context.Events.Where(s => s.IsActive == (byte?) RecordTypeEnum.Active)
                    .Include(s => s.EventOwner)
    .Select(e => new{
    e, 
    EventTicklets = e.EventTickets.Where(y => y.AvailableInventory >= 1 ).ToList()
})
                    .Where(g => g.e.IsActive != null && g.e.EventOwner.IsActive == true)

答案 1 :(得分:0)

我无法在单个查询中解决问题,所以我使用了两个查询

queryEvents = context.Events.Where(s => s.IsActive == (byte?)RecordTypeEnum.Active)
                    .Include(s => s.EventOwner).Include(x => x.EventTickets)
                    .Where(g => g.IsActive == (byte)RecordTypeEnum.Active && g.EventOwner.IsActive == true)
                    .OrderByDescending(h => h.EventOwnerId).ThenBy(j => j.Title);

                queryEvents = queryEvents.Select(o =>
                {
                    o.EventTickets = o.EventTickets.Where(f => f.AvailableInventory > 0 && f.Amount != zero ).ToList();
                    return o;
                }).ToList();

在第一个查询中,我选择了所有事件并包括了票证表,然后在第二个查询中,我选择了所有事件,其中票证对象中的字段满足指定条件