簡體   English   中英

使用linq在MVC5中搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM