当值在另一个列表中时,Linq-OrderBy id
本文关键字:Linq-OrderBy id 列表 另一个 | 更新日期: 2023-09-27 18:20:04
我需要你的帮助。
比方说:
public class myProduct
{
public string Tags {get;set;} // Comma seperated values
}
List<myProduct> myProducts = WhatEver // Feeding the list products
List<long> capacity = WhatEverAlso // Feed the list long values from somewhere
现在,我想做的是按容量订购myProducts列表。
因此,如果myProduct.Tags
="89,3,6"容量="1,2,3,4,5,6"
首先出现的产品中有1个,然后是2个等等。
问题不在于对它们进行排序,实际上问题在于有些标签不包含容量值。
编辑:例如,products.tags可以是"89,16,99"因此它不包含任何容量值。第2版:我不需要过滤产品,只需要订购它们。
第3版:我开始用var foo = myProducts.OrderBy(p => p.Tags.Split(',').Intersect(capacity).OrderBy(c => capacity).Any());
我觉得我很接近,但我想不出其他的
希望你能理解我的问题,我的英语表达不是很好:''请随时向我询问更多信息。
问题还不完全清楚,但这能让你走上正轨吗?
var ordered =
from p in myProducts
let tags = p.Tags.Split(',').Select(long.Parse)
let capIndices =
tags.Select(t => capacity.IndexOf(t))
.Where(i => i >= 0)
where capIndices.Any() // filter out products without capacity
let capIndex = capIndices.Min()
orderby capIndex
select p;
这将按其任何标签在capacity
列表中的最早位置订购产品。如果capacity
列表中没有任何标签,则产品不会包含在最终结果中。