gpt4 book ai didi

c# - Sitecore:使用 LINQ 与 ID 进行比较的有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:45 26 4
gpt4 key购买 nike

我有一个 LINQ 查询检索 的列表,例如:

var results = SearchContext.GetQueryable<Person>()
.Where(i => i.Enabled)
.Where(i => i.TemplateName == "Person")
.Random(6);

每个“Person”类型的对象都有一个“Location”字段,它也是一个 Glass 映射项,因此有一个 ID;我只想选择 Location 具有特定 ID 的项目。

我怎样才能以高效的方式进行这项工作?

编辑:我可能应该澄清一下,无论是否有效,我都无法执行此比较。因为 GUID 是一个对象,我不能在 LINQ 查询中执行 ToString,所以我不能只选择 Location 项具有特定 ID 的项。关于如何实现这一目标的任何线索?

编辑 2:添加子句

.Where(i => i.Location.Id == this.Id)

不起作用,出于...某种原因,因为我无法调试 LINQ“看到”的内容。如果我转换另一个 ID,我将以这种方式将其与字符串进行比较:

var theOtherID = this.Id.ToString("N");

然后它与这个 LINQ 行一起工作:

.Where(i => i["Location"].Contains(theOtherID))

我仍然不知道为什么。

最佳答案

一种方法是在 Person 上包含一个单独的属性,该属性会被 Glass 映射器忽略,但可用于搜索:

[SitecoreIgnore]
[Sitecore.ContentSearch.IndexField("location")]
public Sitecore.Data.ID LocationID { get; set; }

您可以在搜索中使用它,如下所示:

Sitecore.Data.ID locationId = Sitecore.Data.ID.Parse(stringOrGuid);
var results = SearchContext.GetQueryable<Person>()
.Where(i => i.Enabled)
.Where(i => i.TemplateName == "Person")
.Where(i => i.LocationID == locationId)
.Random(6);

我认为使用多个 where 子句与条件语句的效率值得商榷。它们可能会导致执行相同的 Lucene 查询。在这种情况下,我更喜欢可读性而不是优化,但这就是我。

关于c# - Sitecore:使用 LINQ 与 ID 进行比较的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30081055/

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