【发布时间】:2017-05-19 18:26:58
【问题描述】:
如果这是重复的,请告诉我,我到处搜索。这可能只是一个我不熟悉的简单 LINQ 概念。
这是我的数据结构的简化版:
public interface ICourse
{
List<ISession> Sessions { get; set; }
}
public interface ISession
{
Boolean InRange { get; set; }
}
问题:我有一个List<ICourse>。我想返回所有课程 (ICourse),但过滤这些课程上的会话 (ISession),并且只包括 InRange (true) 的会话。
试过了:
List<ICourse> results = //data retrieval.
return results.Where(course => course.Sessions
.Where(session => session.InRange).ToList<ISession>())
.ToList<ICourse>();
错误:
无法将类型 'System.Collections.Generic.List<ISession>' 隐式转换为 'bool'。
无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型。
显然,当我只使用一个Where 子句时它不会抱怨,即:
return results.Where(course => course.Sessions.Count > 0).ToList<ICourse>();
【问题讨论】: