2016-12-10 50 views
0

我有要事和类别表。一个事件可能有多个关联的类别。所以它是一对多的。如何在一个一对多的关系LINQ过滤表?

当我尝试过滤CATEGORY表时,出现错误 ArgumentException:属性表达式i => i.Category.CategoryName.Contains("Social")无效。表达式应代表一个属性访问:t => t.MyProperty。有关包括相关数据的更多信息,请参阅Loading Related Data

这是我的代码

var viewModel = new EventIndexData(); 
      viewModel.Events = await _context.Events 
           .Include(i => i.Categories) 
            .ThenInclude(i => i.Category.CategoryName.Contains("Social")) 
            .AsNoTracking() 
           .ToListAsync(); 

任何帮助赞赏!

+0

您没有提供详细资讯波苏斯和的DbContext,但无论如何,请检查我的答案,让我知道,如果包括过滤尚不支持是非常有用的 –

+0

。请参阅https://github.com/aspnet/EntityFramework/issues/1833 – Smit

回答

0

您需要首先创建一个查询和追加条件:

var categoryName = "Social"; 

var query = _context.Events.Include(i => i.Category); 

if (String.IsNullOrEmpty(categoryName)) 
{ 
    query = query.Where(item => item.Category.CategoryName.Contains(categoryName)); 
} 

var viewModel = new EventIndexData(); 

viewModel.Events = await query.ToListAsync(); 

我不知道你的对象的名字,但你可以在你的代码修复。