gpt4 book ai didi

c# - 由于包装器,使用 $expand 的 OData 中断了强制转换操作

转载 作者:可可西里 更新时间:2023-11-01 09:15:39 25 4
gpt4 key购买 nike

我遇到了与 here: 相同的问题

但是,答案对我来说还不够。首先,我一辈子都找不到 HierarchyNodeExpressionVisitor在 OData 5.0.0(不是 RC1)中(或任何地方,尝试谷歌搜索)。

其次,即使我确实发现它返回了 IHttpActionResult不够好,我需要返回一个类型 PageResult<MyViewModel>

声明的返回理由 IHttpActionResult是“处理结果可能不再是 IQueryable<MyEntity> 的事实。”一旦使用了 $expand 运算符。

但这对我来说没有意义,因为我认为 $expand 运算符用于在实体上包含导航属性,就像服务器端一样 Include(e => e.RelatedProperty)将。至少在我的例子中,我只包含实体上已有的属性,所以我不必担心它“可能是其他东西”。

但是当使用 $expand=Department 时我不能Cast<>()到实体类型,因为它不能转换 SelectAllAndExpand<MyEntity>MyEntity .

我怎样才能将扩展“展开”回原来的实体,以便进行投影?

public PageResult<DateSnippetWithDepartmentsViewModel> GetDatesWithDepartments(ODataQueryOptions<DateSnippet> options)
{
IQueryable query = options.ApplyTo(_context.DateSnippets, new ODataQuerySettings());;

//Exception when using $expand.. cannot cast SelectAllAndExpand<DateSnippet> to DateSnippet
List<DateSnippet> dateSnippets = query.Cast<DateSnippet>().ToList();

var dateSnippetsViewModels = (from d in dateSnippets
select new DateSnippetWithDepartmentsViewModel
{
...
});

var result = new PageResult<DateSnippetWithDepartmentsViewModel>(
dateSnippetsViewModels as IEnumerable<DateSnippetWithDepartmentsViewModel>,
Request.GetNextPageLink(),
Request.GetInlineCount());

return result;
}

最佳答案

试试这个。希望应该能工作,当我们到达枚举器时,结果应该是一个 DateSnippet。您之前所做的是尝试在 Linq 表达式树中进行强制转换。我怀疑在 IQueryable Execute 中,它被解析和转换而不是转换。

public PageResult<DateSnippetWithDepartmentsViewModel> GetDatesWithDepartments(ODataQueryOptions<DateSnippet> options)
{
IQueryable query = options.ApplyTo(_context.DateSnippets, new ODataQuerySettings());;

List<DateSnippet> dateSnippets = new List<DateSnippet>();
foreach(DateSnippet item in query)
{
dateSnippets.Add(item);
}

var dateSnippetsViewModels = (from d in dateSnippets
select new DateSnippetWithDepartmentsViewModel
{
...
});

var result = new PageResult<DateSnippetWithDepartmentsViewModel>(
dateSnippetsViewModels as IEnumerable<DateSnippetWithDepartmentsViewModel>,
Request.GetNextPageLink(),
Request.GetInlineCount());

return result;
}

关于c# - 由于包装器,使用 $expand 的 OData 中断了强制转换操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com