Не может неявно преобразовать тип IEnumerable <T> к IQueryable <T>

Если вы используете выделенную память, значит, вы не делаете ничего плохого. Это становится проблемой, когда вы пишете функции (кроме основной), которые выделяют память, не освобождая ее и не делая ее доступной для остальной части вашей программы. Затем ваша программа продолжает работать с выделенной ей памятью, но никак не может ее использовать. Ваша программа и другие запущенные программы лишены этой памяти.

Редактировать: Не на 100% точно сказать, что другие работающие программы лишены этой памяти. Операционная система всегда может позволить им использовать ее за счет выгрузки вашей программы в виртуальную память (</handwaving>). Однако дело в том, что если ваша программа освобождает память, которую она не использует, то обмен виртуальной памятью с меньшей вероятностью будет необходим.

20
задан Spooky 20 June 2015 в 02:17
поделиться

5 ответов

У меня это работает (с разными таблицами, конечно, но с той же взаимосвязью):

IQueryable<Pet> personPets = (
   from p in db.Person
   where p.ID == somePersonID
   select p
).Single().Pets.AsQueryable();

Хотя я бы, вероятно, написал это в некотором варианте таким образом:

var personPets = 
    db.Person.Single(t => t.Id == somePersonId).Pets.AsQueryable();    
45
ответ дан 29 November 2019 в 23:14
поделиться
List<Pet> personPets = 
   (from p in Persons
   where p.ID == somePersonID
   select p.Pets).ToList();

Попробуйте что-нибудь вроде этого.

2
ответ дан 29 November 2019 в 23:14
поделиться

Посмотрите на свой запрос:

    var personPets= from p in Person
    where p.ID == somePersonID
    select p.Pets;

Происходит то, что вы возвращаете IEnumerable (из одного элемента) типов IEntitySet (тип: IEnumerable > ).

Вы должны получить IEnumerable , и он будет преобразован в IQueryable Метод AsQueryable :

public IQueryable<Pet> GetPersonPets(int personID)
{
    var person = Person.Single(p=> p.ID == personID);

    return person.Pets.AsQueryable();
}
2
ответ дан 29 November 2019 в 23:14
поделиться

У меня есть следующее, и оно отлично работает. Я настраиваю простую базу данных с двумя вышеупомянутыми таблицами и создаю класс данных с помощью VS.

var db = new DataClasses1DataContext();
var personPets = from p in db.Persons
                 where p.PersonId == 1
                 select p.Pet;

Мне кажется, что ваш Person на самом деле является Class , а не объектом базы данных (который по умолчанию назван генератором кода). Сначала проверьте, работает ли описанное выше для вас, иногда отладчик может просто указать причину, которая на самом деле не указывает на настоящую проблему.

1
ответ дан 29 November 2019 в 23:14
поделиться

что сработало для меня,

    var db = new DataClasses1DataContext();
var personPets = from p in db.Persons
                 where p.PersonId == 1
                 select p.Pet;
IQuerable<Pet> pets = (IQuerable<Pet>)personPets;

как ни странно

1
ответ дан 29 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: