当值在另一个列表中时,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());我觉得我很接近,但我想不出其他的

希望你能理解我的问题,我的英语表达不是很好:''请随时向我询问更多信息。

当值在另一个列表中时,Linq-OrderBy id

问题还不完全清楚,但这能让你走上正轨吗?

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列表中没有任何标签,则产品不会包含在最终结果中。