gpt4 book ai didi

c# - 比较两个 Linq 对象

转载 作者:行者123 更新时间:2023-11-30 17:17:13 25 4
gpt4 key购买 nike

我想比较两个相同的 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 对象的 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);

关于c# - 比较两个 Linq 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com