으로 얻을 레코드를 업데이트 나는 그것이 CountryId 및 COUNTRYNAME 주어진 cityID에 따라 도착이 쿼리쿼리 너무 느린 - LINQ 쿼리
foreach (var item in collection)
{
var countrylist = from country in countryList
where
(from state in stateList
where
(from city in cityList
where
city.CityID == item.CityID
select new
{
city.CountryID
}).Contains(new { StateID = state.StateID })
select new
{
state.CountryID
}).Contains(new { CountryID = country.CountryID })
select new
{
CountryID = country.CountryIDD,
Name = country.Name
};
item.Country = new Country();
item.Country.CountryID = countrylist.Select(s => s.CountryID).FirstOrDefault();
item.Country.Name = countrylist.Select(s => s.CountryName).FirstOrDefault();
}
을 가지고 있고 그것은 컬렉션의 관련 개체를 업데이트합니다. 이제 루프에서 실행, 현재 나는 컬렉션에 5-10 개의 항목 (테스트 데이터)이 있으며 눈에 띄게 느린 시간이 걸립니다. 5-10 개 항목이 느린 경우 100 개 이상 항목에 너무 느립니다. 이 일을 더 잘 할 수있는 또 다른 방법이 있습니까?
은 내가 당신의 도시가있는 CountryID 필드가, 당신은 모든 국가에 가입 할 필요가 없습니다 추측거야 도움말
모든 종류의
대신 가입을 사용해보십시오. https://msdn.microsoft.com/en-us/library/bb311040 .aspx? f = 255 & MSPPError = -2147217396 –
먼저 쿼리를 단순화하십시오. 그것이 무엇을 하는지를 이해할 수 없다면 더 빨리 진행할 수 없습니다. 그런 다음 누락 된 색인이 있는지 확인하십시오. 또한 각 항목에 대해 동일한 쿼리를 실행하는 대신 item.CityID 목록을 생성하고'itemCities.Contains (city.CityID)'를 사용하십시오. 이것은 5-10 개의 느린 쿼리 대신 IN (...) 절이있는 단일 쿼리로 변환됩니다. –
@MurrayFoxcroft 제가 처음에는 그렇게 생각하지 않았다는 것을 알고 동의합니다. – Angloos