2012-01-12 7 views
1

私はあなたの助けが必要です。Linq - OrderBy IDの値が別のリストにある場合

が言うことができます:

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" なら

2次いで、それら1の製品を表示される最初の等

問題はそれらを発注していませんが、問題は実際には一部のタグに容量値が含まれていないことです。

EDIT:例えば 、products.tagsので、それは能力値のいずれかが含まれていない「89,16,99」 である可能性があります。 EDIT2: 私は製品を注文するためにフィルタリングする必要はありません。

EDIT3: 私はvar foo = myProducts.OrderBy(p => p.Tags.Split(',').Intersect(capacity).OrderBy(c => capacity).Any()); でに開始し、私はそのイムの近くを感じるが、私は残りの部分を把握傾けます。 :(

は、英語での私の表現が良いことではありません、あなたは私の質問を理解願っています: \任意の追加情報については、私にお気軽に

+1

どの人が能力を持っているのか、持っていないのかあなたはどのように知っていますか? MyProductクラスにCapacityプロパティを追加できますか? IEnumerable <>。Join()はソリューションの一部になるだろうという気持ちがありますが、私は実際にはもっと情報なしでは分かりません。 – itsme86

+1

私はforeach {}が必要であると確信しています。 –

+0

@ itsme86 - 質問に追加例 – Dementic

答えて

0

質問は、必ずしも明らかではないが、これはあなたを取得ありません。右のトラックに?

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リストにない場合は、製品が最終結果には含まれていません。

+0

ありがとう、これは私の問題を解決しました。 – Dementic