我正在尝试向我的 umbraco 页面添加特色项目功能,人们可以添加他们想要突出显示的页面,然后将这些 ID 与搜索结果进行比较,首先输出特色项目,然后迭代其余结果。
所以我有
@foreach (var property in Model.SearchResults.Properties)
{}
我知道我可以使用 Linq 来对 ID 数组执行 where 操作,但是我将如何迭代其余项目呢?我需要两个循环吗?一份包含 ID,一份不包含 ID?
例如
var allPropeties = Model.SearchResults.Properties();
var featuredIDs= new [1,22,55,84,1234];
var featuredItems= allProperties.Where(x => featuredIDs.Contains(x.Id)).ToArray();
我是 C# 和 Linq 的新手,所以我还不确定灵活性。如果这与另一个问题重复,但我在任何地方都找不到它,我深表歉意!
Umbraco 使用我们的物业管理软件,每个物业都有一个唯一的 ID 以及地址、图像等物业数据... API 会转储该信息,Umbraco 上每个物业 1 页。在搜索中使用该信息和输出的代码就在那里。
我们目前使用问题顶部的简单 foreach 输出属性搜索/列表页面。
我想要解决的是,我是否可以强制它首先输出特色属性,或者我是否必须分离逻辑并循环遍历特色属性(如果存在),然后输出不包括特色列表的其余部分。
var allPropeties = Model.SearchResults.Properties();
if(Model.Content.FeaturedProps){
var featuredIDs= Model.Content.FeaturedProps;
var featuredItems= allProperties.Where(x => featuredIDs.Contains(x.Id));
}
目标是为每个列表页面添加 5 - 10 个特色属性,如我们的网站
所示因为您想要结果中的所有记录,并且您希望根据集合中包含的 id 对它们进行降序排序。因此,我们需要 Where
,而不是
OrderByDescending
:.OrderByDescending(x => featureIDs.Contains("foo"))
您在错误的条款中使用了正确的条件。