只为asp.net MVC中EntityFramewotk中的require条件从Sql获取记录
本文关键字:条件 Sql 获取 记录 require 中的 net asp MVC EntityFramewotk 只为 | 更新日期: 2023-09-27 17:58:44
我对实体框架很陌生。现在,我有一个模型类:
型号:
public class Search_Model
{
[Required(ErrorMessage="Gender")]
public string Gender { get; set; }
public string Age {get; set;}
public string Religion { get; set; }
public string Mothertongue { get; set; }
public IEnumerable<Search_Model> Searcg_Ie { get; set; }
}
在我的视图中,当用户填写表单并且所有填写的值都达到上面的模型&则它将重定向到以下操作:
操作:
public ActionResult PublicSearch(Search_Model mdl)
{
Search_Model srch = new Search_Model();
srch.Searcg_Ie = new List<Search_Model> { mdl};
var rtc = srch.Searcg_Ie.Select(z=>z).Where(s=>s!=null).ToList();
return RedirectToAction("Index", "Home");
}
所以我的问题是,从上面的模型来看,年龄、宗教、母语字段在运行时可能为空。我希望数据库表中的记录只用于非空值。假设只有性别&年龄有数据。因此,在实体框架中,我们可以这样写:
return(from x in dbcontext.table1
where x.age=Age,
where x.gender = Gender
select new model{
model properties here..
}).ToList();
没关系。但是,当我们不知道哪个属性将为null时,我将如何在运行时做到这一点,以及如何为SQL数据库中的get记录编写代码?
我不想使用空模型属性查找记录
您可以根据需要链接任意多个Where子句,它们将被翻译成和。因此,您可以获得查询的引用,并在满足条件时对其进行筛选。例如,在您的情况下,它是这样的:
var query = dbcontext.table1;
if(age != null)
query = query.Where(m => m.Age == age);
if(gender != null)
query = query.Where(m => m.Gender == gender);
return query.Select(m => new model
{
model properties here..
}).ToList()
return
(from x in dbcontext.table1
where Age == null || x.age==Age
&& Gender == null || x.gender == Gender
select new model{
model properties here..
}).ToList();
您正在检查属性是否等于一个值。任何一个都可以匹配,但如果不匹配,则该值不应为null。
return (from x in dbcontext.table1
where (x.age == Age || x.gender == Gender) && (x.age != null && x.gender != null)
select new {/* properties */}).ToList();
您可以通过此查询获得预期结果
var filteredData = dbContext.table1.Where(x =>!string.IsNullOrEmpty(gender) ? x.Gender == gender : true && !string.IsNullOrEmpty(age) ? x.Age == age : true && !string.IsNullOrEmpty (religion) ? x.Religion == religion : true).ToList();