【问题标题】:Sitefinity - LINQ to SQL Limitations?Sitefinity - LINQ to SQL 限制?
【发布时间】:2017-04-04 19:36:26
【问题描述】:

我目前正在为 Sitefinity (v9.2) 项目构建自定义 MVC 小部件。

作为此小部件的一部分,可以查询数据库以检索动态模块类型(文章)的集合。我正在尝试获取包含 Labels.PublicLabels guid 列表中所有标签的文章类型。

我目前的查询是:

var collection = dynamicModuleManager.GetDataItems(articleType)
    .Where(a => a.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live 
     && a.Visible == true 
     && Labels.PublicLabels.All(l => a.GetValue<IList<Guid>>("Public").Contains(l)));

在运行时,我收到一个异常,提到“服务器端未实现”。 这可能是 OpenAccess 的限制吗?

我已经尝试了各种成功的 LINQ to SQL 查询组合,但我很难理解这里的问题。

任何想法将不胜感激!

更新: 我在同一个查询上尝试了一些变体,例如:

   var collection = dynamicModuleManager.GetDataItems(articleType)
    .Where(a => a.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live 
     && a.Visible == true 
     && Labels.PublicLabels.Any(l => a.GetValue<IList<Guid>>("Public").Contains(l)));

没有结果,我仍然收到以下异常消息:

目前未在数据库服务器端执行“System.Linq.Enumerable:Any(IEnumerable1,Func2)”。

任何进一步的建议将不胜感激,现在我假设这与围绕 LINQ to SQL 的 OpenAccess 限制有关。

【问题讨论】:

  • 你的动态模块中“Public”字段的类型是什么?
  • 您好,公共字段是一个分类。所以这将是一个 TrackedList...

标签: c# sql linq telerik sitefinity


【解决方案1】:

设法解决了这个问题。绝对归结为 Open Access LINQ to SQL 的限制。我所做的是在尽可能多地过滤集合之后添加一个额外的 where 子句。这是完整的查询:

    var collection = dynamicModuleManager.GetDataItems(articleType).Where(a => a.Status == ContentLifecycleStatus.Live && a.Visible == true)
        .OrderByDescending(a => a.PublicationDate)
        .Distinct()
        .Where(a => new HashSet<Guid>(a.GetValue<IList<Guid>>("Public")).IsSupersetOf(Labels.PublicLabels));

我将向 Sitefinity 报告此问题,如果他们设法进行适当的修复,我将进行报告。

感谢大家的支持!

【讨论】:

    【解决方案2】:

    我以前也遇到过同样的问题,这个方法对我有用

    var listIds = Labels.PublicLabels;
    var collection = dynamicModuleManager.GetDataItems(articleType)
       .Where(a => a.Status == ContentLifecycleStatus.Live && a.Visible == true)           
       .Where(a => a.GetValue<TrackedList<Guid>>("Public").Where(al => listIds.Contains(al)).Any());
    

    我没有编译,如果它不适合你,请告诉我

    【讨论】:

    • 嗨,虽然您的查询确实有效,但我事先尝试了类似的方法,但它没有返回我所追求的。我需要获取包含公共标签列表中所有标签的所有自定义文章类型。上面的查询将返回所有包含公共列表中任何标签的文章,这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多