c# - 使用 OpenAccess ORM 在数据库服务器端直接执行方法
问题描述
我正在尝试在数据库服务器端运行查询以将整个过滤结果加载到应用程序中。我尝试在不使用我自己的方法的情况下执行过滤,并且它没有错误地工作。但是如果我在表达式树中使用我自己的方法,我会在执行过程中得到这个错误:
失败:“eventItem.GetEventOfficesIds()”的直接客户端执行失败
private static IQueryable<Guid> GetEventOfficesIds(this Event eventItem)
{
IQueryable<Guid> officesIds;
if (eventItem.GetValue<bool?>("IsPublicNews") != null &&
eventItem.GetValue<bool?>("IsPublicNews").HasValue && eventItem.GetValue<bool?>("IsPublicNews").Value)
{
officesIds = new List<Guid>().ToArray().AsQueryable();
}
else
{
officesIds = eventItem.GetValue<TrackedList<Guid>>("Offices")?.ToArray().AsQueryable();
}
return officesIds;
}
...
EventsManager manager = EventsManager.GetManager();
IQueryable<Event> eventItems = manager.GetEvents();
Expression<Func<Event, bool>> officeFilter = eventItem =>
eventItem.GetEventOfficesIds().Contains(office.Value) && !eventItem.GetEventOfficesIds().Any();
if (office != null && office.Value != Guid.Empty)
{
eventItems = eventItems.Where(officeFilter);
}
我可以更改我的方法的代码还是 OpenAccess ORM 不支持手动编写的执行方法?
解决方案
我会把它简化成这样的:
using Telerik.Sitefinity.Data.Linq.Dynamic;
EventsManager manager = EventsManager.GetManager();
IQueryable<Event> eventItems = manager.GetEvents();
if (office != null && office.Value != Guid.Empty)
{
eventItems = eventItems
.Where("IsPublicNews = true")
.Where(e => e.GetValue<TrackedList<Guid>>("Offices")?.ToArray().Contains(office.Value))
}
推荐阅读
- r - 保持水平顺序的数值因素
- angular-cli - 库中的 Angular cli 生成组件不会创建 scss 文件
- java - 我该如何解决这个问题,如果有的话,什么样的算法适合解决它
- flutter - 使用 driveApi.files.create 上传到 Google Drive 时如何获取上传进度
- mysql - Mysql Left Outer Join on 3 个表失败
- python - 如何替换熊猫多索引列集中的值
- python - 带有 LGBMRegressor 的 GridSearchCV 找不到最佳参数
- group-by - ABAP中内部表的动态GROUP BY
- php - Laravel 从 Restful API 中的 JSON 响应中删除反斜杠
- json - json解码的存储结果突然消失/观察对象在WatchOS中没有反应