0

我有一些课:

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 中创建用于查找等于Region的方法:List<AddressInfoes>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”赋予不同的含义,后者已在“父级或当前”范围内用于表示其他内容 C:\TEMP\ConsoleApplication1\ ConsoleApplication1\Program.cs 89 39 MultipartFormData

4

3 回答 3

3

这应该工作

regions.Where(x => addresses.Any(addr => addr.Region == x.RegionName));
//.ToList() or .Any();
于 2013-08-20T09:25:29.067 回答
2

我有这段代码,也许它有点矫枉过正,但它是通用的:

    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

于 2013-08-20T09:24:15.513 回答
2
bool isEqual = addresses.Select(a=>a.Region).Distinct().OrderBy(x=>x)
              .SequenceEqual(regions.Select(r=>r.RegionName).Distinct().OrderBy(x=>x));
于 2013-08-20T09:28:31.660 回答