p.c*_*ell 20 linq collections iqueryable linq-to-sql
混淆的场景:一个人有零个,一个或多个宠物.
使用Linq to Sql,需要获取IQueryable给定personID的宠物列表.这是ERD中受损严重/被屠宰/混淆的部分:

码:
public IQueryable<Pet> GetPersonPets(int personID)
{
var personPets= from p in Person
where p.ID == somePersonID
select p.Pets;
return personPets; //fail
// return (IQueryable<Pet>)personPets //also fail
// return personPets.AsQueryable<Pet>() //also fail
}
Run Code Online (Sandbox Code Playgroud)
提出异常:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable (System.Data.Linq.EntitySet(Pet))' to 'System.Linq.IQueryable(Pet)'. An explicit conversion exists (are you missing a cast?)
尝试失败:
直接投射不起作用: (IQueryable<MyType>)
调用收集方法AsQueryable不起作用: .AsQueryable<MyType>()
问题:
如何正确地将LinqToSql查询的结果转换为IQueryable?
Blo*_*ard 45
这对我有用(当然有不同的表,但关系相同):
IQueryable<Pet> personPets = (
from p in db.Person
where p.ID == somePersonID
select p
).Single().Pets.AsQueryable();
Run Code Online (Sandbox Code Playgroud)
虽然我可能会用这种方式写一些变体:
var personPets =
db.Person.Single(t => t.Id == somePersonId).Pets.AsQueryable();
Run Code Online (Sandbox Code Playgroud)