比较两个Linq对象
本文关键字:两个 Linq 对象 比较 | 更新日期: 2023-09-27 18:02:42
我想比较两个相同的Linq表对象迭代通过他们的属性,但我必须省略一些属性,这是一个参数的泛型类型,例如EntitySet (LinqTable有许多不同的类型),我怎么能检查如果属性是那种类型(EntitySet)?
很抱歉没有代码,但我是从手机上写的:)如果有必要,我会附加一些代码;)
编辑:我最终用下面的代码解决了这个问题:
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 object的Name属性类似于"EntitySet '1",这意味着只有一个参数的EntitySet对象。
也许有人知道更好的解决方法?
创建一个实现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);