Cannot implicitly convert type IEnumerable to IQueryable

前端 未结 5 2042
一个人的身影
一个人的身影 2021-02-05 07:46

Obfuscated Scenario: A person has zero, one or many pets.

Using Linq to Sql, the need is to get an IQueryable list of pets for the given pe

相关标签:
5条回答
  • 2021-02-05 08:08

    what worked for me,

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

    strangely enough

    0 讨论(0)
  • 2021-02-05 08:12

    Look at your query:

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

    What is happening is that you are returning an IEnumerable (of one element) of IEntitySet<Pet> types (the type: IEnumerable<IEntitySet<Pet>>).

    You should get an IEnumerable<Pet> and it will be converted to IQueryable<Pet> by the AsQueryable method:

    public IQueryable<Pet> GetPersonPets(int personID)
    {
        var person = Person.Single(p=> p.ID == personID);
    
        return person.Pets.AsQueryable();
    }
    
    0 讨论(0)
  • 2021-02-05 08:18

    This works for me (with different tables of course, but same relationship):

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

    Although I'd probably write it in some variation of this way:

    var personPets = 
        db.Person.Single(t => t.Id == somePersonId).Pets.AsQueryable();    
    
    0 讨论(0)
  • 2021-02-05 08:18
    List<Pet> personPets = 
       (from p in Persons
       where p.ID == somePersonID
       select p.Pets).ToList();
    

    Try something like this.

    0 讨论(0)
  • 2021-02-05 08:21

    I have the following and it works perfectly. Which I setup a simple database with your above mentioned two tables, and generate the dataclass with VS.

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

    It looks like to me, your Person is actually the Class instead of the database object (which is by default named by the code generator). Test if the above works for you first, sometimes the debugger may simply give you some freaky reason which is not actually pointing to the real problem.

    0 讨论(0)
提交回复
热议问题