循环遍历子集,然后循环主集 C#、Razor、linq、Umbraco

问题描述 投票:0回答:1

我正在尝试向我的 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 个特色属性,如我们的网站

所示
c# .net linq razor umbraco
1个回答
0
投票

因为您想要结果中的所有记录,并且您希望根据集合中包含的 id 对它们进行降序排序。因此,我们需要 Where,而不是

OrderByDescending
.OrderByDescending(x => featureIDs.Contains("foo"))

您在错误的条款中使用了正确的条件。

© www.soinside.com 2019 - 2024. All rights reserved.