C# 使用实体框架基于过滤器(非必填字段)获取数据

C# 使用实体框架基于过滤器(非必填字段)获取数据,c#,entity-framework,entity-framework-core,linq-to-entities,C#,Entity Framework,Entity Framework Core,Linq To Entities,我需要从名为Student的实体中获取数据,该实体包含字段(Id、Name、Age、Dob)。我有一个请求对象StudentFilter public class StudentFilter { public int? Id {get;set;} public string Name {get;set;} public int Age {get;set;} public DateTime Dob {get;set;} } 基于此,我需要使用这些

我需要从名为
Student
的实体中获取数据,该实体包含字段(Id、Name、Age、Dob)。我有一个请求对象
StudentFilter

public class StudentFilter 
{
      public int? Id {get;set;}
      public string Name {get;set;}
      public int Age {get;set;}
      public DateTime Dob {get;set;}
}
基于此,我需要使用这些过滤器形成一个查询,并从数据库中获取数据:

public List<Student> Get(StudentFilter  request)
{
     if(request.Id.HasValue && request.Id > 0)
     {
     }

     if(request.Age.HasValue && request.Age > 0)
     {
     }

     if(request.Dob.HasValue)
     {
     }

     _context.<Student>.Get()
}
公共列表获取(StudentFilter请求)
{
if(request.Id.HasValue&&request.Id>0)
{
}
if(request.Age.HasValue&&request.Age>0)
{
}
if(请求Dob.HasValue)
{
}
_context..Get()
}

有人能帮我吗?提前感谢

试试这个,根据您的情况将
链接到哪里

var query = context.Students.AsQueryable();

if(request.Id.HasValue && request.Id > 0)
{
    //equal query
    query = query.Where(x => x.Id == request.Id.Value);
    /* greater than or less than and equal to query
    *query = query.Where(x => x.Id >= request.Id.Value) or query.Where(x => x.Id <= request.Id.Value) or query.Where(x => x.Id != request.Id.Value)
    */
}

if(request.Age.HasValue && request.Age > 0)
{
    query = query.Where(x => x.Id == request.Age.Value);
    //same applies to top depending on your condition, can be !=, <=, >= or between (< && >)
}

if(request.Dob.HasValue)
{
    query = query.Where(x => x.Id == request.Dob.Value);
    //same applies to top depending on your condition, can be !=, <=, >=
}

//the ONLY part which the query will be executed
var result = query.ToList();
var query=context.Students.AsQueryable();
if(request.Id.HasValue&&request.Id>0)
{
//相等查询
query=query.Where(x=>x.Id==request.Id.Value);
/*大于或小于并等于查询
*query=query.Where(x=>x.Id>=request.Id.Value)或query.Where(x=>x.Id x.Id!=request.Id.Value)
*/
}
if(request.Age.HasValue&&request.Age>0)
{
query=query.Where(x=>x.Id==request.Age.Value);
//这同样适用于top,具体取决于您的情况,可以是!=、=或介于(<&&>)
}
if(请求Dob.HasValue)
{
query=query.Where(x=>x.Id==request.Dob.Value);
//同样适用于top,具体取决于您的情况,可能是!==
}
//将执行查询的唯一部分
var result=query.ToList();

到目前为止,您尝试了什么?你遇到了什么特别的问题吗?补充回答这不是我所期望的。。。在这里,您正在获取数据并在不同的条件下运行。。这会导致性能问题。我需要根据输入形成一个条件查询,并将其传递给上下文以获取data@user12073927它还没有运行,还没有获取,因为我将查询设置为
AsQueryable
,它仅在使用
条件执行
ToList
FirstOrDefault
时执行built@user12073927尝试使用
SQL探查器
,查看在使用conditions@user12073927这里解释它会添加多个条件吗?我已经尝试过谓词过滤器,它现在正在工作。。非常感谢。