我试图编写一个基于两个列表返回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.SiteNumber
与loadedBillSites
列表进行比较。我尝试使用Linq.Except
方法,但我看到了扩展方法错误,无法处理SiteNumber
。
var unknownSites = loadedBillSites.Except(); //<- storedSites.SiteNumber?
if (unknownSites.count > 0)
{
return false;
}
return true;
有没有办法轻松实现我想要的东西?
答案 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)
这取决于您的列表storedSites
是MyModel
还是List<MyModel>
。
案例1:storedSites
类型为MyModel
bool notExists = !loadedBillSites.Any(s => s == MyModel.SiteNumber);
案例2:storedSites
类型为List<MyModel>
在这种情况下,请使用@ yacoub-massab的完整答案。