2011-07-15 24 views
3

2つの同一のLinqテーブルオブジェクトを比較したいのですが、いくつかのプロパティを省略しなければなりません。 EntitySet(LinqTableにはさまざまな型があります)、プロパティがその型(EntitySet)であるかどうかを確認するにはどうすればよいですか?2つのLinqオブジェクトを比較する

なしコードについて申し訳ありませんが、私は携帯電話からの書き込み:)それが必要になる場合、私はいくつかのコードを追加します。)

EDIT:

私は最終的に以下のコードでその問題を解決

internal static void AssertIsEqualTo<T>(this T value, T comparedValue, List<string> fieldsToAvoid) 
{ 
    Type type = typeof(T); 
    PropertyInfo[] properties = type.GetProperties(); 

    if (fieldsToAvoid == null) 
    { 
     fieldsToAvoid = new List<string>(); 
    } 

    for (int i = 0; i < properties.Length; i++) 
    { 
     var expectedPropertyValue = properties[i].GetValue(value, null); 
     var actualPropertyValue = properties[i].GetValue(comparedValue, null); 

     if (!fieldsToAvoid.Contains(properties[i].Name)) 
     { 
      if (properties[i].PropertyType.Name != typeof(System.Data.Linq.EntitySet<object>).Name) 
      { 
       Assert.AreEqual(expectedPropertyValue, actualPropertyValue, "In {0} object {1} is not equal.", type.ToString(), properties[i].Name); 
      } 
     } 
    } 
} 

TypeオブジェクトのNameプロパティには、「EntitySet '1」という1つのパラメータを持つEntitySetオブジェクトを意味するものがあります。

誰かがそれを解決する良い方法を知っているかもしれませんか?

答えて

2

IEqualityComparerを実装するクラスを作成します。

public class ProjectComparer : IEqualityComparer<Project> 
{ 
    public bool Equals(Project x, Project y) 
    { 
     if (x == null || y == null) 
      return false; 
     else 
      return (x.ProjectID == y.ProjectID); 
    } 

    public int GetHashCode(Project obj) 
    { 
     return obj.ProjectID.GetHashCode(); 
    } 
} 

Equalsメソッドのロジックを必要なものに置き換えて、さまざまな方法でオブジェクトを比較します。最も簡単に:

bool areEqual = new ProjectComparer().Equals(project1, project2); 
関連する問題