var cityList = from country in
doc.Element("result")
.Element("cities")
.Descendants("city")
select new {
Name = country.Element("name").Value,
Code = country.Element("code").Value,
CountryCode = int.Parse(country
.Element("countrycode")
.Value)
};
foreach(var citee in cityList)
{
City city = new City();
city.CountryID = from cnt in db.Countries
where cnt.DOTWInternalID == citee.CountryCode
select cnt.ID;
}
Я получаю ошибку на втором запросе, как замечено в заголовке этого сообщения. Я пытался преобразовать в int
кому: nullable int
но ничто не работало. Помогите мне, парням.
Спасибо
он вернется iQueryable, вам нужно будет сделать что-то вроде использования First
cit.CountryID = db.Countries.First(a=>a.DOTWInternalID == citee.CountryCode).ID
IQueryable - это не один int, а запрос, который может представлять коллекцию.
Как говорится в сообщении об ошибке, ваш запрос Linq возвращает System.Linq.IQueryable (для всех намерений и целей набор целых чисел). Если вы хотите получить один из них, вы можете вызвать First или ElementAt (n) , чтобы получить n-й элемент.
Вот проблема и решение
из cnt в db.Countries, где cnt.DOTWInternalID == citee.CountryCode select cnt.ID part . Если вы опустите идентификатор, он вернет общий IEnumerable с Country (в надежде, что у вас есть класс Country). Итак, что вам нужно сделать, это сначала вернуть критерии выбора и выбрать первую строку, а затем поле идентификатора. То же, что показано ниже.
cit.CountryID = (from cnt in db.Countries where cnt.DOTWInternalID == citee.CountryCode select cnt).First<Country>().ID;
Это решит вашу проблему.