C#比较不同集合中属性的值

本文关键字:属性 集合 比较 | 更新日期: 2023-09-27 18:28:22

我有一些类:

public class AddressInfoes
{
    public int Id { get; set; }
    public string Region { get; set; }
    public int RegionID { get; set; }
}

和类别:

public class Regions
{
    public int Id { get; set; }
    public string RegionName { get; set; }
    public int RegionID { get; set; }
}

我正在尝试创建一种方法,在IEnumerable:中查找List<AddressInfoes>Region等于RegionName

private bool RegionCheck(List<AddressInfoes> addresses, IEnumerable<Regions> regions)
{
    return regions.Any(x=>addresses.Any()y=>y.Region.Equals(x.RegionName));
}

但是这种方法不正确吗?我该如何实施?

我需要通过两个属性进行比较:

  var result = addresses.Where(reg => !regions.Any(y => y.RegionName.Equals(reg.Region.Trim(), StringComparison.InvariantCultureIgnoreCase))
            && addresses.Where(reg => !regions.Any(y => y.RegionDomainID == reg.RegionDomainID)));

但我有错误:

错误1无法在此作用域中声明名为"reg"的本地变量,因为它会赋予"reg"不同的含义,而"reg"已在"父级或当前"作用域中用于表示其他内容C:''TEMP''ConsoleApplication1''ConsoleApplication1''Program.cs 89 39 MultipartFormData

C#比较不同集合中属性的值

这应该能在中工作

regions.Where(x => addresses.Any(addr => addr.Region == x.RegionName));
//.ToList() or .Any();
bool isEqual = addresses.Select(a=>a.Region).Distinct().OrderBy(x=>x)
              .SequenceEqual(regions.Select(r=>r.RegionName).Distinct().OrderBy(x=>x));

我有这段代码,也许它有些过头了,但它是通用的:

    public static bool IsEquivalent<T, TU>(this ICollection<T> collection, ICollection<TU> sourceCollection, Func<T, TU, bool> predicate) where T : class
    {
        var copyCollection = collection.Clone();
        if (copyCollection.Count == 0 && !sourceCollection.Any()) return true;
        foreach (var source in sourceCollection)
        {
            var element = copyCollection.FirstOrDefault(x => predicate(x, source));
            if (element == null) return false;
            copyCollection.Remove(element);
        }
        return !copyCollection.Any();
    }
    public static ICollection<T> Clone<T>(this ICollection<T> listToClone)
    {
        var array = new T[listToClone.Count];
        listToClone.CopyTo(array, 0);
        return array.ToList();
    }

你可以这样称呼它:

regions.IsEquivalent(regions2, (x,y)=>x.Region==y.RegionName);

区域为AddressInfoes,区域2为Regions

此方法返回bool。当集合的大小相等->并且所有项都根据谓词匹配时,它将返回true