搜索控制器方法
[HttpPost]
public ActionResult Search(string cno, string fname, string lname, string male, string female, string istateid, string icityid, string professionid, string educationid)
{
var db = new clubDataContext();
var query = db.M_Registarions.Where((x=> x.M_ContactNo ==(cno??x.M_ContactNo) && x.M_Fname == (fname ?? x.M_Fname) && x.M_Lname==(lname ?? x.M_Lname) && x.M_Gender == (male??x.M_Gender));
if(istateid != "")
{
int stateid1 = Convert.ToInt32(istateid);
query = query.Where(x=> x.M_StatteId == stateid1);
}
if(icityid != "")
{
int cityid1 = Convert.ToInt32(icityid);
query = query.Where(x=> x.M_CityId == cityid1);
}
if(professionid != "")
{
int professionid1 = Convert.ToInt32(professionid);
query = query.Where(x=> x.P_id == professionid1);
}
if(educationid != "")
{
int educationid1 = Convert.ToInt32(educationid);
query = query.Where(x=> x.P_id == educationid1);
}
if (!query.Any())
{
ViewBag.Count = 0;
}
else
{
var result = query.ToList();
//var search_query = from p in db.M_Registarions where (x => x.M_Fname.Contains(fname ?? x.M_Fname) || x.M_Lname.Contains(lname ?? x.M_Lname)) select p;
ViewBag.SearchResult = result;
ViewBag.Count = 1;
}
return PartialView("SearchResult");
}
这里我在cno,名字和姓氏中使用OR操作。我想使用&&(And)操作而不是||(OR)。但问题是我必须检查NULL或空格,我已经在stateid,cityid,professionid和educationid中完成了。 那么首先如何使用条件? var query = db.M_Registration.Where(if {})喜欢这个吗?
答案 0 :(得分:0)
使用blocs {}和"返回"提出一个更复杂的表达
例如:
db.M_Registration.Where(p =>
{
if{ // my condition... }
return p.Name == name
else
return p.Name == ...
});
答案 1 :(得分:0)
你可以试试这个。
[HttpPost]
public ActionResult Search(string cno, string fname, string lname, string male, string female, string istateid, string icityid, string professionid, string educationid)
{
var db = new clubDataContext();
var query = db.M_Registarions.Where((x=> x.M_ContactNo ==(cno??x.M_ContactNo) && x.M_Fname == (fname ?? x.M_Fname) && x.M_Lname==(lname ?? x.M_Lname) && x.M_Gender == (male??x.M_Gender));
if(IntValue(istateid).HasValue)
{
query = query.Where(x=> x.M_StatteId == IntValue(istateid).Value);
}
if(IntValue(icityid).HasValue)
{
query = query.Where(x=> x.M_CityId == IntValue(icityid).Value);
}
if(IntValue(professionid).HasValue)
{
query = query.Where(x=> x.P_id == IntValue(professionid).Value);
}
if(IntValue(educationid).HasValue)
{
query = query.Where(x=> x.P_id == IntValue(educationid).Value);
}
if (!query.Any())
{
ViewBag.Count = 0;
}
else
{
var result = query.ToList();
//var search_query = from p in db.M_Registarions where (x => x.M_Fname.Contains(fname ?? x.M_Fname) || x.M_Lname.Contains(lname ?? x.M_Lname)) select p;
ViewBag.SearchResult = result;
ViewBag.Count = 1;
}
return PartialView("SearchResult");
}
public int? IntValue(string input)
{
int temp;
if (int.TryParse(input, out temp))
{
return temp;
}
return null;
}
答案 2 :(得分:0)
我认为您可以通过尝试以下查询来获得您想要的结果并避免大量的ifs:
var query =
db.M_Registarions.Where(
x =>
x.M_ContactNo == (cno ?? x.M_ContactNo) && x.M_Fname == (fname ?? x.M_Fname)
&& x.M_Lname == (lname ?? x.M_Lname) && x.M_Gender == (male ?? x.M_Gender)
&& (string.IsNullOrEmpty(istateid) || x.M_StatteId == Convert.ToInt32(istateid))
&& (string.IsNullOrEmpty(icityid) || x.M_CityId == Convert.ToInt32(icityid))
&& (string.IsNullOrEmpty(professionid) || x.P_id == Convert.ToInt32(professionid))
&& (string.IsNullOrEmpty(educationid) || x.P_id == Convert.ToInt32(educationid)));