无法在where子句中使用条件语句

时间:2017-12-20 13:13:27

标签: asp.net-mvc linq asp.net-mvc-4 asp.net-mvc-3 asp.net-mvc-2

以下是我的以下代码

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代码中做同样的事情我该怎么办?

2 个答案:

答案 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)