以下是我的以下代码
string CampusId = "1";
string ClassId = "1";
var Class = GetClassesselect();
var model = (from sr in db.StudentRequests
join c in db.Classes
on sr.ClassId equals c.ClassId
where
(CampusId ==""?"0": CampusId)
&& (ClassId == "" ? "0" : ClassId)
orderby sr.CreatedOn descending
select new Studentvm
{
PaymentMethod = sr.PaymentMethod,
CampusId = (int)ViewData["CampusId"],
ClassId = (int)ViewData["ClassId"],
Availableclass = Class,
})
.ToList().ToPagedList(page ?? 1, 10);
public IList<SelectListItem> GetClassesselect()
{
// This comes from database.
var Class = db.Classes
.Select(x => new SelectListItem { Text = x.ClassName, Value = x.ClassId.ToString() })
.ToList();
Class.Insert(0, new SelectListItem { Text = "--Please Select--", Value = "" });
return Class;
}
这里我试图将where语句作为条件,如果campusid为null,那么默认情况下它不计算条件应该采取条件的条件
例如在sql中我们正在做一些事情
Select *
from Registration where
(ISNULL(@CampusId,'')='' OR (R.CampusId = @CampusId ))
AND (ISNULL(@ClassId,'')='' OR (TC.ClassId =@ClassId))
在上面的sql中,如果@CampusId为null,那么该语句将不会在where where条件中被视为已授予
所以我试图在上面的Linq代码中做同样的事情我该怎么办?
答案 0 :(得分:1)
非常简单:只有在它不为空时才使用你的param,否则忽略它。
where
CampusId == null || sr.CampusId == CampusId
&&
ClassId == null || sr.ClassId == ClassId
当然假设这些属于“sr”属性。
答案 1 :(得分:1)
这不适用于三元运算符,因为查询提供程序无法将其转换为SQL
但是,如果我理解您的逻辑正确,则需要选择@CampusId
为空或R.CampusId
等于@CampusId
的记录。所以
where
(CampusId == null || CampusId == sr.CampusId) &&
(ClassId == null || ClassId == sr.ClassId)