TempoClick Ответов: 2

Узел выражения LINQ 'arrayindex' не поддерживается в LINQ to entities.


Я пытаюсь сделать простой оператор select where, чтобы получить название страны, где код alfa2 = country[i] в цикле.

Что я уже пробовал:

OFFERS_COUNTRIES c = new OFFERS_COUNTRIES();
    for (int i = 0; i < countryId.Length; i++)
       {
          var nnn = from e in db.COUNTRIES where e.alfa2 == countryId[i] select e.countryName;
          c.country_name = nnn.ToString();

          db.OFFERS_COUNTRIES.Add(c);
          db.SaveChanges();
        }

Я получаю исключение в этой строке:
c.country_name = nnn.ToString();
В чем же проблема?

#realJSOP

Кстати, ваши теги для этого вопроса были немного завышены. Все, что вам действительно нужно, - это C#, LINQ и Entity Framework. остальное не имеет отношения к вопросу.

Laxmidhar tatwa technologies

С. country_name = ННН.первый().метод toString();

TempoClick

@Laxmidhar спасибо. Это то, что мне было нужно.

2 Ответов

Рейтинг:
5

Richard Deeming

Почти наверняка было бы более эффективно получить список названий стран в одном запросе и сохранить изменения только после добавления всех предложений в контекст:

var countries = db.COUNTRIES
    .Where(e => countryId.Contains(e.alfa1))
    .Select(e => e.countryName)
    .AsEnumerable()
    .Select(name => new OFFERS_COUNTRIES 
    {
        country_name = name
    });

db.OFFERS_COUNTRIES.AddRange(countries);
db.SaveChanges();


Maciej Los

Если бы я мог добавить двойную 5...

Рейтинг:
1

#realJSOP

Попробовать это:

for (int i = 0; i < countryId.Length; i++)
{
    var countryID = countryId[i]; //<-- removes array reference from the linq query
    var nnn = from e in db.COUNTRIES where e.alfa2 == countryID select e.countryName;
    c.country_name = nnn.ToString();

    db.OFFERS_COUNTRIES.Add(c);
    db.SaveChanges();
}


Maciej Los

5ed!

TempoClick

@JohnSimmons Спасибо за ответ. Этот подход упускает то, что @Laxmidhar прокомментировал выше. Без.во-первых (), что будет возвращать SQL-запроса, а не переменной.