C# 仅从Sql获取asp.net MVC中EntityFramewotk中所需条件的记录
我对实体框架非常陌生。 目前,我有一个模型类: 型号:C# 仅从Sql获取asp.net MVC中EntityFramewotk中所需条件的记录,c#,asp.net-mvc,entity-framework,ienumerable,C#,Asp.net Mvc,Entity Framework,Ienumerable,我对实体框架非常陌生。 目前,我有一个模型类: 型号: 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;
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");
}
那很好。但是,当我们不知道哪个属性将为null时,我将如何在运行时执行此操作,以及如何为SQL数据库中的get记录编写代码
我不想查找使用空模型属性的记录您正在检查属性是否等于一个值。任何一个都可以匹配,但如果不匹配,则该值不应为null
return
(from x in dbcontext.table1
where Age == null || x.age==Age
&& Gender == null || x.gender == Gender
select new model{
model properties here..
}).ToList();
return (from x in dbcontext.table1
where (x.age == Age || x.gender == Gender) && (x.age != null && x.gender != null)
select new {/* properties */}).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();
通过此查询可以得到预期的结果
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();
您可以根据需要链接任意多个Where子句,它们将被转换为ands。所以,如果您的条件满足,您将获得查询的引用并对其进行过滤。例如,在您的情况下是这样的:
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()
您可以根据需要链接任意多个Where子句,它们将被转换为ands。所以,如果您的条件满足,您将获得查询的引用并对其进行过滤。例如,在您的情况下是这样的:
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()
您可以使用反射来获取模型上的属性,检查它们是否为null。从那里,您可以构建where子句来排除空值。您可以使用反射来获取模型上的属性,检查它们是否为空。从那里,您可以构建where子句来排除空值。您是对的,但是如果
age==null
那么它将在age为null的位置查找记录,我希望实际上如果age为null,那么不要使用age属性查找,使用其他不为null的属性查找..如果您的搜索筛选器(age==null)那么x.age==age将不存在于最终查询中。你是对的,但是如果age==null
那么它将查找age为null的记录,我想实际上如果age为null,那么不要使用age属性查找,使用其他不为null的属性查找..如果你的搜索筛选器(age==null)那么x.age==age将不存在于最终查询中。我不想使用null模型属性查找记录。使用not null查找记录。仅限模型属性。我不想使用null模型属性查找记录。请使用not null查找记录。仅限模型属性。@Rahul Chaudhari请尝试此操作,它肯定会解决您的问题。@Rahul Chaudhari您可以在他的查询中添加更多类似于&&运算符的属性。@Rahul Chaudhari请尝试此操作,它肯定会解决您的问题。@Rahul Chaudhari您可以在他的查询中添加更多类似于&&运算符的属性。