Я пытаюсь добавить фильтры в мое приложение MVC.Я несколько успешен в этом, потому что я могу вернуть отфильтрованное значение, если оно присутствует в БД.
Однако, когда его нет в БД, я хочу, чтобы он возвратил пустой список.Поскольку Linq должен возвращать пустой, если результаты равны нулю.однако я использовал try catch для перехвата любых исключений, если по какой-то причине операторы кода не работают, и если введенные поля не соответствуют какой-либо записи в БД, запрос linq разбивается на catch и исключение равно null.
Iпонятия не имею, что не так, это не должно быть даже в ловушку.
Запрос Linq:
if (attr1 == "null" && attr3 != "null" && attr2 != "null")
{
attr1 = "%";
Size = db.GetFilterResultCount(index, Size, attr1, attr2, attr3).Count();
accountlist = db.GetFilterResult(index, Size, attr1, attr2, attr3).ToList();
filteredlist.GetList = accountlist;
filteredlist.index = index;
filteredlist.size = Size;
filteredlist.totalSize = db.Accounts.Count();
filteredlist.resultSize = db.GetFilterResultCount(index, Size, attr1, attr2, attr3).Count();
}
Это одно из многих условий, которые я использую, чтобы проверить, какое поле фильтруется.Но запрос linq одинаков для всех.
Хранимая процедура:
CREATE PROCEDURE [dbo].[GetFilterResult]
@PageIndex INT,
@pageSize INT,
@attr1 nvarchar(300),
@attr2 nvarchar(300),
@attr3 nvarchar(300)
AS
Begin
SELECT Accounts.firstName, Accounts.lastName, Accounts.Email,
Accounts.dateOfBirth, Accounts.phoneNo, Countries.CountryName
FROM Accounts INNER JOIN Countries On Accounts.CountryID =
Countries.CountryID
Where (Accounts.firstName LIKE CONCAT('%', @attr1, '%') and
Accounts.lastName LIKE CONCAT('%', @attr2, '%') and Accounts.CountryID
Like CONCAT('%', @attr3, '%'))
ORDER BY UserId OFFSET @PageSize*(@PageIndex-1) ROWS FETCH NEXT
@PageSize ROWS ONLY;
END
GetFilterResultCount:
CREATE PROCEDURE [dbo].[GetFilterResult]
@PageIndex INT,
@pageSize INT,
@attr1 nvarchar(300),
@attr2 nvarchar(300),
@attr3 nvarchar(300)
AS
Begin
SELECT Accounts.firstName, Accounts.lastName, Accounts.Email,
Accounts.dateOfBirth, Accounts.phoneNo, Countries.CountryName
FROM Accounts INNER JOIN Countries On Accounts.CountryID =
Countries.CountryID
Where (Accounts.firstName LIKE CONCAT('%', @attr1, '%') and
Accounts.lastName LIKE CONCAT('%', @attr2, '%') and Accounts.CountryID
Like CONCAT('%', @attr3, '%'))
END