【发布时间】:2019-12-14 01:29:05
【问题描述】:
我正在使用 EF Core 和 Linq。
假设我有一个名为 Dog 的类。 Dog 表与 Mammal 表具有 has-a 关系。 考虑以下用于搜索和查询数据库的文件:
public class DogSearch
{
public string Name{get;set;}
public int? NumberOfLegs{get;set;}
public string Breed{get;set}
IQueryable<Dog> BuildSearchQuery(IQueryable<Dog> qry)
{
if (!string.IsNullOrEmpty(Name))
qry = qry.Where(a => a.Mammal.Name.Contains(Name));
if (NumberOfLegs != null)
qry = qry.Where(a => a.Mammal.NumberOfLegs == NumberOfLegs);
if (Breed != null))
qry = qry.Where(a => a.Breed== Breed);
return qry;
}
}
public class MammalSearch
{
public string Name{get;set;}
public int? NumberOfLegs{get;set;}
IQueryable<Mammal> BuildSearchQuery(IQueryable<Mammal> qry)
{
if (!string.IsNullOrEmpty(Name))
qry = qry.Where(a => a.Name.Contains(Name));
if (NumberOfLegs != null)
qry = qry.Where(a => a.NumberOfLegs == NumberOfLegs);
return qry;
}
}
我想以某种方式与 DogSearch 类共享 MammalSearch 类中的代码。这样可以在一个地方维护对 Name 和 NumberOfLegs 的搜索。我正在努力重构它来做到这一点。如何让IQueryable<Dog> 使用IQueryable<Mammal>?
编辑:
EF使用的POCO如下:
public class Dog
{
public Id{get;set;}
public string Breed{get;set}
public Guid MammalId{get;set;}
[ForeignKey(nameof(MammalId))]
public Mammal Mammal{get;set;}
}
public class Mammal
{
public Id {get;set;}
public string Name{get;set}
public int NumberOfLegs{get;set;}
}
【问题讨论】:
标签: c# entity-framework .net-core linq-to-entities iqueryable