按包含的实体过滤

时间:2012-08-31 03:41:28

标签: c# .net linq

我面临的错误是

  

委托'System.Func< MyWebSiteApp.Models.FontCategory,int,bool>'   不带1个参数

var s = db.FontCategories.Include("Fonts").
                Where(s=>s.Fonts.Where(s=>s.Inactive == false).ToList();

如何修复它?

2 个答案:

答案 0 :(得分:4)

我认为你是在追逐Linq Any 。这将返回包含至少一个活动字体的字体类别:

var s = db.FontCategories.Include("Fonts").
    .Where(s => s.Fonts.Any(s => s.Inactive == false)).ToList();

现有代码的问题在于 Where 期望Predicate<FontCategory>类型(即返回true / false的lambda),但lambda会返回IEnumerable<Font>。因此错误。

来自documentation for Any

  

确定序列的任何元素是否存在或满足条件。

答案 1 :(得分:0)

你错过了parentesis一个where子句采取一个功能,取一个T并返回一个bool。表达式应该是s =&gt; s.somethingBool

var fontCandidates = db.FontCategories.Include("Fonts").SelectMany(s => s.Fonts);
var activeFonts = fontCandidates.Where(f => !f.Inactive).ToList();