Linq to SQL - 忽略null或零的搜索参数

时间:2016-04-06 13:25:43

标签: c# asp.net-mvc linq

我有一个搜索表单,用户可以在其中输入一个到多个参数(数据,状态,类型,ID,摘要,描述),并将其余参数留空。

这是我的基本搜索的Linq to SQL代码。有没有办法检查Linq中的每个参数是否为零,空或空字符串?

List<RequestStatusModel> objRequestStatus = new List<RequestStatusModel>();
var query = from r in SimCareDB.Requests
            where r.CustomerID == 31       
            select (new RequestStatusModel
            {
                RequestID = r.RequestID,
                RequestTitle = r.RequestTitle,
                DateAdded = r.DateAdded.ToString(),
                DateChanged = r.DateChanged.ToString(),
                RequestStatusID = r.StatusID
            });

谢谢!

3 个答案:

答案 0 :(得分:2)

如果它不必在你的linq语句中,你可以用经典的if语句来做。

List<RequestStatusModel> objRequestStatus = new List<RequestStatusModel>();
var query = from r in SimCareDB.Requests
            where r.CustomerID == 31
            select (new RequestStatusModel
            {
               //...
            });

if(data != null) //Replace with additional checks, if neccessary
{
   query = query.where(x=> ...);
}

if(status != null) 
{
   query = query.where(x => ...)
}

答案 1 :(得分:0)

如果您只想过滤某些条件,那么您应该这样做

var objRequestStatus = new List<RequestStatusModel>();
    var query = from r in SimCareDB.Requests
                where r.CustomerID == 31

if (String.IsNullOrEmpty(r.RequestID))
    objRequestStatus = objRequestStatus.Where(x => x.RequestID == r.RequestID);

if (String.IsNullOrEmpty(r.RequestTitle))
    objRequestStatus = objRequestStatus.Where(x => x.RequestTitle == r.RequestTitle);

//you other filters here

根据传递的请求

,根据需要设置表达式

答案 2 :(得分:0)

如果你想避免所有这些List<RequestStatusModel> objRequestStatus = new List<RequestStatusModel>(); var query = from r in SimCareDB.Requests where (r.CustomerID == 31) && (!String.IsNullOrEmpty(id) ? r.RequestID == id : true) && (!String.IsNullOrEmpty(status) ? r.StatusID == status : true) /* And so on */ select (new RequestStatusModel { RequestID = r.RequestID, RequestTitle = r.RequestTitle, DateAdded = r.DateAdded.ToString(), DateChanged = r.DateChanged.ToString(), RequestStatusID = r.StatusID }); ,你可以做

if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
else{

    startTimer();

}