返回bool的方法不存在于两个不同类型的列表中

时间:2016-01-26 12:27:21

标签: c#

我试图编写一个基于两个列表返回bool的方法。

loadedBillSites - 第一个列表的类型为List<string>,这是从CSV中读取的站点编号列表。

storedSites - 第二个列表的类型为MyModel,其中包含大约10个属性,其中一个属性为SiteNumber

我的方法目前看起来像这样:

public bool AreSitesStored()
{
    var loadedBillSites = _invoiceRepository.GetAllBillSites(path).Distinct().ToList(); //read file in, return list of sites contained in file

    var storedSites = _siteRepository.GetAllSites(); //get all known sites from database

    //return false if loadedBillSites contains anything 'unknown' to the system
}

我很难将storedsites.SiteNumberloadedBillSites列表进行比较。我尝试使用Linq.Except方法,但我看到了扩展方法错误,无法处理SiteNumber

    var unknownSites = loadedBillSites.Except(); //<- storedSites.SiteNumber?

    if (unknownSites.count > 0)
    {
        return false;
    }
    return true;

有没有办法轻松实现我想要的东西?

3 个答案:

答案 0 :(得分:2)

您可以将已知的站点号加载到如下列表中:

var knownSiteNumbers = storedSites.Select(x => x.SiteNumber).ToList();

然后使用Any方法查看loadedBillSites中的任何项目是否不存在于已知网站编号列表中,如下所示:

bool unknownSites = loadedBillSites.Any(x => !knownSiteNumbers.Contains(x));

如果列表很大,您可以使用HashSet代替列表来存储已知的站点号,如下所示:

var knownSiteNumbers =
    new HashSet<string>(storedSites.Select(x => x.SiteNumber));

bool unknownSites =
    loadedBillSites.Any(x => !knownSiteNumbers.Contains(x));

答案 1 :(得分:1)

你可以用这个:

var trafficLayer = new google.maps.TrafficLayer(); trafficLayer.setMap(map);

答案 2 :(得分:0)

这取决于您的列表storedSitesMyModel还是List<MyModel>

案例1:storedSites类型为MyModel

bool notExists = !loadedBillSites.Any(s => s == MyModel.SiteNumber);

案例2:storedSites类型为List<MyModel>

在这种情况下,请使用@ yacoub-massab的完整答案。