c# – 列出IQueryable对象内部
发布时间:2020-12-15 17:25:08 所属栏目:百科 来源:网络整理
导读:鉴于以下内容: public class Person{ public int ID { get; set;} public string Name { get; set;} public IQueryablePet Pets { get;set; }}public class Pet{ public int id { get; set; } public int OwnerId { get; set; } public string Name { get;
鉴于以下内容:
public class Person { public int ID { get; set;} public string Name { get; set;} public IQueryable<Pet> Pets { get;set; } } public class Pet { public int id { get; set; } public int OwnerId { get; set; } public string Name { get; set; } } public class SearchCriteria { public string PersonName {get; set; } public List<string> PetNames {get; set;} } 在使用IQueryable进行搜索时,用他们的宠物实现所有人的选择 public List<Person> GetWithPets(SearchCriteria search) { var people = (from p in context.People where p.Name == search.PersonName select new Person{ ID = p.ID,Name = p.Name,Pets = (from pt in context.Pets where pt.OwnerId == p.ID select new Pet { id = pt.ID,OwnerId = pt.OwnerId,Name = pt.Name }).AsQueryable }).AsQueryable(); foreach(var str in search.PetNames) { people = people.Where(o=>o.Pets.Any(p=>p.Name == str)); } return people.ToList(); } 我的问题是,无论搜索名称的foreach,在返回的人员列表中,即使有,宠物也是null 编辑: public class Person { public int ID { get; set; } public string Name { get; set; } public IQueryable<Animal> Pets { get; set; } } public class Animal { public int id { get; set; } public int? OwnerId { get; set; } public string Name { get; set; } } public class SearchCriteria { public string PersonName { get; set; } public List<string> PetNames { get; set; } } class Program { public static List<Person> GetWithPets(SearchCriteria search) { using (DatabaseEntities context = new DatabaseEntities()) { var people = (from p in context.Peoples where p.Name == search.PersonName select new Person { ID = p.ID,Pets = (from pt in context.Pets where pt.OwnerID == p.ID select new Animal { id = pt.ID,OwnerId = pt.OwnerID,Name = pt.Name }).AsQueryable() }).AsQueryable(); foreach (var str in search.PetNames) { people = people.Where(o => o.Pets.Any(p => p.Name == str)); } return people.ToList(); } } 解决方法
如果Person和Pet是您模型的实体,并且Person.Pets是Pet实体的导航属性,并且您希望拥有包含所有完整Pet实体的完整Person实体并引用您的注释…
……你可以用这个: public List<Person> GetWithPets(SearchCriteria search) { var people = from p in context.People.Include("Pets") where p.Name == search.PersonName && p.Pets.Any(pt => search.PetNames.Contains(pt.Name)) select p; return people.ToList(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |