2012-07-09 11 views
6

私は2つの一般的なリストを持っています.1つは「Featured」、もう1つは「Filtered」です。2つの一般的なリストを比較して重複を削除します

List<Content> Featured = new List<Content>(); 
List<Content> Filtered = new List<Content>(); 

そうのような単純なクラスである「コンテンツ」の項目含まれて両方:

public class Content 
{ 
    public long ContentID { get; set;} 
    public string Title { get; set; } 
    public string Url { get; set; } 
    public string Image { get; set; } 
    public string Teaser { get; set; } 

    public Content(long contentId, string title, string url, string image, string teaser) 
    { 
     ContentID = contentId; 
     Title = title; 
     Url = url; 
     Image = image; 
    } 
} 

「フィルタ」に表示されるすべてのアイテムをだけでなく、「フィルタ」から削除する「特集」が必要に表示されます。さらに、両方のリストは、最初に表示される「注目の」アイテムとともに、1つの汎用リストに結合されます。

これを行うためにいくつかのforeachループを書くことができますが、LINQを使用するより洗練された方法が必要であると感じるのを助けることはできません。

私はC#4.0を使用しています。

+0

したがって、 'Featured'はその全体が表示され、' Filtered'が表示されますが、 'Featured'の項目は削除されますか? –

+0

はいそうです:) –

+1

見てください:http://stackoverflow.com/a/2060093/100283。 Linqではなく2つのオブジェクトを比較する簡単な方法です。 –

答えて

6

あなたがUnionメソッドを使用することができたIEqualityComparerを定義した場合:MyContentComparerのラフな実装は次のようになり

List<Content> FeaturedAndFiltered = Featured.Union(Filtered, new MyContentComparer()); 

を:両方のリスト内のオブジェクトのプレゼンターを想定し

public class ContentEqualityComparer : IEqualityComparer<Content> 
{ 

    public bool Equals(Content c1, Content c2) 
    { 
     return (c1.ContentID == c2.ContentID); 
    } 


    public int GetHashCode(Content c) 
    { 
     return c.ContentID.GetHashCode(); 
    } 

} 
2

は実際と同じですオブジェクトは、以下を行うことができます:

var totalList = Featured 
    .Concat(Filtered.Where(f => !Featured.Contains(f))) 
    .ToList() 

更新

または、マフムード・ガマルで述べたような方法を除いて使用して:

var totalList = Featured 
    .Concat(Filtered.Except(Featured)) 
    .ToList() 
6

あなたはLINQメソッドUnionを探しているのは、具体的に

var singleList = Featured.Union(Filtered); 

これはすべて返されますFeaturedの項目が続き、FeaturedではないFilteredのすべての項目が続きます。 リスト内にリストがあるので、Featuredが2回ある場合は、,と表示されます。

あなたがやる、しかし、は、どちらかEqualGetHashCodeの実装に追加することによって、またはIEqualityComparerを提供することにより、これを行うためにContentインスタンスを比較できるようにする必要があります。

関連する問題