[英]Searching in MVC5 using linq
使用此Linq代碼,我可以獲取與搜索輸入相對應的任何值,即,如果我搜索country = Italy
並且gender = female
,則可以同時獲得意大利的雇員和女性雇員,但我需要更具體。 即,如果我搜索“ Country = Italy
和“ Gender = female
,則需要從意大利獲得女性員工。 請為我建議一個Linq代碼
另外,我有五個搜索輸入(名字,姓氏,名稱,國家/地區,性別),所以僅( &&
)不能在這里完成工作!
這是代碼:
List<Employee> Elist = userdb.Employees
.Where(i => i.FirstName == Fn ||
i.LastName == Ln ||
i.Designation == desig ||
i.Country == country ||
i.Gender == gender)
.ToList();
在這種情況下, IQueryable
的性質非常有用。 您可以Where
查詢中添加Where
子句,而無需實際對數據庫執行任何操作。 僅當實現數據時(例如使用ToList()
,才執行SQL。 這稱為延遲查詢執行 。 因此,您可以這樣編寫代碼:
IQueryable<Employee> query = userdb.Employees;
if(!string.IsNullOrEmpty(Fn))
{
query = query.Where(e => e.FirstName == Fn);
}
if(!string.IsNullOrEmpty(Ln))
{
query = query.Where(e => e.LastName == Ln);
}
// etc. etc.
List<Employee> Elist = query.ToList();
最有可能的是,您不希望包括未填寫的條件。僅當值存在(或不為null)時,才想按值進行過濾。 使用IQueryable構建搜索,然后將其分配給Elist。
IQueryable<Employee> Query = userdb.Employees;
if (Fn != null) {
Query = Query.Where(i => i.FirstName.Equals(Fn));
}
if (Ln != null) {
Query = Query.Where(i => i.LastName.Equals(Ln));
}
if (desig != null) {
Query = Query.Where(i => i.Designation.Equals(desig));
}
if (country != null) {
Query = Query.Where(i => i.Country.Equals(country));
}
if (gender != null) {
Query = Query.Where(i => i.Gender.Equals(gender));
}
List<Employee> Elist = Query.ToList();
我個人將在這里使用PredicateBuilder。 舉個小例子,假設您只有兩個查詢:
Expression<Func<Person, bool>> hasFirstName = p1 => p1.FirstName == Fn;
Expression<Func<Person, bool>> hasLastName= p2 => p2.LastName == Ln";
您可以像這樣將其構建到謂詞構建器中,並繼續使用任何形式的邏輯進行擴展:
var predicate = PredicateBuilder.False<Employee>();
if (!string.IsNullOrEmpty(Fn))
{
predicate = predicate.And(e => e.FirstName == Fn);
}
if (!string.IsNullOrEmpty(Ln))
{
predicate = predicate.And(e => e.FirstName == Ln);
}
var result = userdb.Employees.Where(predicate);
嘗試這個
List<Employee> Elist = userdb.Employees
.Where(i => (Fn == null || i.FirstName == Fn ) &&
(Ln == null || i.LastName == Ln ) &&
(desig == null || i.Designation == desig) &&
(country == null || i.Country == country) &&
(gender == null || i.Gender == gender)
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.