在LightSwitch查询中将where子句应用于childcollection

时间:2015-12-22 09:19:57

标签: linq lightswitch-2013

如何针对子集合在LightSwitch查询中使用where子句?

在我的示例中,每个博客都可以有很多评论,我想写一个这样的查询,以便管理员只看到没有任何评论的博客条目:

query = query.Where(q => q.comment.Count() == 0).SingleOrDefault()

我已经包含了SingleOrDefault(),因为我希望管理员每个查询只能看到一个项目,然后他们可以添加评论并移动到博客屏幕上的下一个项目。

尝试上述查询时,出现以下编译时错误:

错误2

无法将方法组'SingleOrDefault'转换为非委托类型'System.Linq.IQueryable'。你打算调用这个方法吗?

我认为这是正确的错误,因为:

partial void Query1_PreprocessQuery(ref IQueryable<blog> query)
{
    query=query.Where(q => q.Evaluations.Count() == 0).SingleOrDefault;
}

返回IQueryable,这是一个不是单一的集合。

我已经尝试将签名更改为部分无效Query1_PreprocessQuery(参考博客查询),现在我得到另一个编译错误,说博客不包含where的定义。

那么,我如何在LightSwitch HTMLClient应用程序中实现所需类型的查询。

1 个答案:

答案 0 :(得分:1)

为了组织这种类型的标量查询,您需要在查询的预处理方法中使用以下类型的LINQ表达式:

partial void BlogWithNoComment_PreprocessQuery(ref IQueryable<blog> query)
{
    query = query.Where(q => q.comment.Count() == 0).Take(1);
}

此外,您需要确保您的查询仅通过在查询的“返回结果数”属性中选择“一个”选项来返回单个结果,如下所示(所需的属性选择以红色突出显示) ):

Query Designer with Single Result Option

以下Microsoft博客中的标量查询部分介绍了此类方法:

Visual Studio LightSwitch Team Blog: How to Create Composed and Scalar Queries (Ravi Eda)

尽管此博客中的屏幕示例基于Silverlight客户端,但它涵盖的查询技术同样适用于HTML客户端。