Linq RavenDB查询中出现“无法将Lambda表达式转换为委托类型”错误
我有一个RavenDb文档,如下所示:Linq RavenDB查询中出现“无法将Lambda表达式转换为委托类型”错误,linq,ravendb,Linq,Ravendb,我有一个RavenDb文档,如下所示: { "ParentId": null, "Order": 10, "Url": "/sandbox", "Rows": [ { "InstanceId": "2771a0d7-7f3f-4854-a3ba-27f25f88a45e", "CSSClass": null, "Columns": [ { "InstanceId": "b91495
{
"ParentId": null,
"Order": 10,
"Url": "/sandbox",
"Rows":
[
{
"InstanceId": "2771a0d7-7f3f-4854-a3ba-27f25f88a45e",
"CSSClass": null,
"Columns":
[
{
"InstanceId": "b91495f5-b770-4da7-8073-ad3bd8221ca8",
"CSSClass": null,
"Span": 3,
"CMSModuleInstanceSettings":
[
{
"$type": "ModuleHTML.Models.ModuleHTMLInstanceSettings, ModuleHTML",
"IsActive": false,
"ShowAuthor": false,
"ShowDate": false,
"ShowCommentsCount": false,
"ShowLast2Comments": false,
"CMSModuleInstanceId": 417,
"ContainerClass": "default",
"ModuleType": "ModuleHTML",
"DisplayType": "Summary"
},
{
"$type": "ModuleHTML.Models.ModuleHTMLInstanceSettings, ModuleHTML",
"IsActive": false,
"ShowAuthor": false,
"ShowDate": false,
"ShowCommentsCount": false,
"ShowLast2Comments": false,
"CMSModuleInstanceId": 545,
"ContainerClass": "default",
"ModuleType": "ModuleHTML",
"DisplayType": "Summary"
}
],
"Id": 0,
"Name": null,
"CreatedOn": "0001-01-01T00:00:00.0000000",
"CreatedBy": 0,
"LastModifiedOn": "0001-01-01T00:00:00.0000000",
"LastModifiedBy": 0
},
...
],
...
},
...
],
...
}
var page = documentSession.Query<CMSPage>()
.SingleOrDefault(p => p.Id == pageId);
我想检索页面文档,包括行、列,然后只包括活动的CMSModuleInstanceSettings
我试过:
var page = documentSession.Query<CMSPage>()
.SingleOrDefault(p => p.Id == pageId)
.Rows
.Any(x => x.Columns
.Any(z => z.CMSModuleInstanceSettings
.Where(m => m.IsActive == true)));
但它的回报是:
Error 1 Cannot convert lambda expression to delegate type
'System.Func<CMS.Models.CMSColumn,bool>' because some of
the return types in the block are not implicitly convertible
to the delegate return type
我做错了什么?你知道你实际上是在做一个查询,然后是一个内存过滤器,对吗 按如下方式拆分:
{
"ParentId": null,
"Order": 10,
"Url": "/sandbox",
"Rows":
[
{
"InstanceId": "2771a0d7-7f3f-4854-a3ba-27f25f88a45e",
"CSSClass": null,
"Columns":
[
{
"InstanceId": "b91495f5-b770-4da7-8073-ad3bd8221ca8",
"CSSClass": null,
"Span": 3,
"CMSModuleInstanceSettings":
[
{
"$type": "ModuleHTML.Models.ModuleHTMLInstanceSettings, ModuleHTML",
"IsActive": false,
"ShowAuthor": false,
"ShowDate": false,
"ShowCommentsCount": false,
"ShowLast2Comments": false,
"CMSModuleInstanceId": 417,
"ContainerClass": "default",
"ModuleType": "ModuleHTML",
"DisplayType": "Summary"
},
{
"$type": "ModuleHTML.Models.ModuleHTMLInstanceSettings, ModuleHTML",
"IsActive": false,
"ShowAuthor": false,
"ShowDate": false,
"ShowCommentsCount": false,
"ShowLast2Comments": false,
"CMSModuleInstanceId": 545,
"ContainerClass": "default",
"ModuleType": "ModuleHTML",
"DisplayType": "Summary"
}
],
"Id": 0,
"Name": null,
"CreatedOn": "0001-01-01T00:00:00.0000000",
"CreatedBy": 0,
"LastModifiedOn": "0001-01-01T00:00:00.0000000",
"LastModifiedBy": 0
},
...
],
...
},
...
],
...
}
var page = documentSession.Query<CMSPage>()
.SingleOrDefault(p => p.Id == pageId);
您现在从哪里得到错误?您知道您实际上是在执行一个查询,然后是内存中的筛选器,对吗 按如下方式拆分:
{
"ParentId": null,
"Order": 10,
"Url": "/sandbox",
"Rows":
[
{
"InstanceId": "2771a0d7-7f3f-4854-a3ba-27f25f88a45e",
"CSSClass": null,
"Columns":
[
{
"InstanceId": "b91495f5-b770-4da7-8073-ad3bd8221ca8",
"CSSClass": null,
"Span": 3,
"CMSModuleInstanceSettings":
[
{
"$type": "ModuleHTML.Models.ModuleHTMLInstanceSettings, ModuleHTML",
"IsActive": false,
"ShowAuthor": false,
"ShowDate": false,
"ShowCommentsCount": false,
"ShowLast2Comments": false,
"CMSModuleInstanceId": 417,
"ContainerClass": "default",
"ModuleType": "ModuleHTML",
"DisplayType": "Summary"
},
{
"$type": "ModuleHTML.Models.ModuleHTMLInstanceSettings, ModuleHTML",
"IsActive": false,
"ShowAuthor": false,
"ShowDate": false,
"ShowCommentsCount": false,
"ShowLast2Comments": false,
"CMSModuleInstanceId": 545,
"ContainerClass": "default",
"ModuleType": "ModuleHTML",
"DisplayType": "Summary"
}
],
"Id": 0,
"Name": null,
"CreatedOn": "0001-01-01T00:00:00.0000000",
"CreatedBy": 0,
"LastModifiedOn": "0001-01-01T00:00:00.0000000",
"LastModifiedBy": 0
},
...
],
...
},
...
],
...
}
var page = documentSession.Query<CMSPage>()
.SingleOrDefault(p => p.Id == pageId);
您现在从哪里得到错误?我确信有更好的方法,但这就是我最终要做的
var page = documentSession.Load<CMSPage>(pageId);
foreach (var row in page.Rows)
{
foreach (var column in row.Columns)
{
var settings = column.CMSModuleInstanceSettings.ToList();
settings.ForEach(x => settings.Remove(x));
column.CMSModuleInstanceSettings = settings;
}
}
我相信有更好的方法,但这就是我最后做的
var page = documentSession.Load<CMSPage>(pageId);
foreach (var row in page.Rows)
{
foreach (var column in row.Columns)
{
var settings = column.CMSModuleInstanceSettings.ToList();
settings.ForEach(x => settings.Remove(x));
column.CMSModuleInstanceSettings = settings;
}
}
嗨,艾恩德,谢谢你的回复。顺便说一句,乌鸦真是太棒了!错误1无法将lambda表达式转换为委托类型“System.Func”,因为块中的某些返回类型无法隐式转换为委托返回类型;第二个错误:错误2无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool”。最终,我仍希望返回页面对象,但具有已筛选子对象。换句话说,我不想要行集合。这有可能吗?如果您确实想要子对象,那么Any不是您想要的。我猜你是LINQ的新手。你可能想要。一路下来。我会将原始页面投影到一个已过滤子集合的克隆中。嗨,Ayende,谢谢你的回复。顺便说一句,乌鸦真是太棒了!错误1无法将lambda表达式转换为委托类型“System.Func”,因为块中的某些返回类型无法隐式转换为委托返回类型;第二个错误:错误2无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool”。最终,我仍希望返回页面对象,但具有已筛选子对象。换句话说,我不想要行集合。这有可能吗?如果您确实想要子对象,那么Any不是您想要的。我猜你是LINQ的新手。你可能想要。一路下来。我会将原始页面投影到已筛选子集合的克隆中。请小心修改原始文档及其子对象,因为如果您将其保存回Raven,则将这些更改保存到数据库。请小心修改原始文档及其子对象,因为如果您保存回Raven,您将把这些更改保存到数据库中。