2015-04-05 1 views
0

У меня есть список кэшированных данныхвыполнения запроса из кэшированных данных, простое утверждение LINQ

private static List<City> CachedCities 
{ 
    get { ... } 
} 

Теперь из этого списка кэшированного Я хочу, чтобы извлечь следующие с помощью LINQ

private someOtherMethod() 
{  
    foreach (var item in someData) { 
    string cityName = from c in CachedCities where c.Id == item.Address.CityId select c.Name; 
    ... 
    } 
} 

я получаю сообщение об ошибке на LINQ заявление

Ошибка 1 не удается неявно преобразовать тип

'System.Collections.Generic.IEnumerable<string>' до 'string'. Явное преобразование существует (вы не получили литой?)

p.s. оба c.Id и Address.CityId являются строками.

+0

Ну предположительно 'city.Name' объявлен как' 'IEnumerable . Трудно сказать без полного примера. (Почему вы объявляете «cityName» за пределами своего цикла, кстати? И я полагаю, что вы на самом деле выполняете какую-то полезную работу в цикле?) –

+0

now cityName объявлен как должен (слева по ошибке за пределами выражения linq). c.Name - строка. Проблема остается. Я перебираю someData для генерации списка viewmodels, чтобы использовать его дальше. Я получаю ошибку по ключевому слову select в выражении linq. – user1765862

+0

Это не должно компилироваться, потому что вы пытаетесь присвоить IEnumerable строке в вашем примере. Можете ли вы предоставить часть фактического (компиляционного) кода? –

ответ

3

Try с этим лямбда-синтаксис запроса

string cityName = CachedCities.Where(x => x.Id == item.Address.CityId) 
        .Select(a => a.Name) 
        .FirstOrDefault(); 
0

То ошибку компиляции. Тип, который вы присваиваете cityName, является IEnumerable, и вы объявляете его как строку.

Попробуйте следующее:

string cityName = CachedCities.Where(c => c.Id == item.Address.CityId).Select(x => x.Name).FirstOrDefault(); 
Смежные вопросы