2017-12-19 11 views
2

私は最初、中、姓のような従業員レコードを含む1つのテーブルを持っています。私はこれらすべてを入力するための3つのテキストボックスを持っています。 今すぐ.net側に基づいてデータをフィルタリングする単一のLINQクエリを書きたいと思います。これらの3つのフィールドのいずれも空白にすることができます。 これは、1つの汎用LINQクエリを書くための方法ですか?名前のミドルネームと姓に基づいてデータのフィルタリングのための一般的なLINQクエリを書く方法

答えて

0

あなたは怒鳴る

_context.tablename.whereた(p => p.firstName.contains(txtFirstName)|| p.middleName.contains(txtMiddleName)のような1つのLINQとクエリまたは条件を書くことができ|| p.lastName.contains(txtLastName))。ToList();

変更tablename上記のLINQクエリ

4
public IList<Employee> GetEmployees(string first, string middle, string last) 
{ 
    var query = context.Employees.AsQueryable(); 
    if (!string.IsNullOrWhiteSpace(first)) 
    { 
     query = query.Where(x => x.FirstName == first); 
    } 
    if (!string.IsNullOrWhiteSpace(middle)) 
    { 
     query = query.Where(x => x.MiddleName == middle); 
    } 
    if (!string.IsNullOrWhiteSpace(last)) 
    { 
     query = query.Where(x => x.LastName == last); 
    } 

    return query.Select(x => 
        new Employee 
        { 
         FullName = string.Join(" ", new string[] { x.FirstName, x.MiddleName, x.LastName}.Where(y => !string.IsNullOrWhiteSpace(y))) 
        }) 
       .ToList(); 
} 
0

であなたとデータベーステーブル使用されている基準値

var criteria = new 
{ 
    FirstName = default(string), 
    MiddleName = default(string), 
    LastName = "Doe", 
}; 

var query = from record in Context() 
      where !string.IsNullOrEmpty(criteria.FirstName) 
        && record.FirstName == criteria.FirstName 
       || !string.IsNullOrEmpty(criteria.MiddleName) 
        && record.MiddleName == criteria.MiddleName 
       || !string.IsNullOrEmpty(criteria.LastName) 
        && record.LastName == criteria.LastName 
      select record; 
+0

完全に動作する例えばチェック要旨https://gist.github.com/dandohotaru/d0598c7dd9599cc4e173b478d7e4cf82 –

0

そのような何かを試してみてくださいを持っている場合だけで検証反復します。

public List<Employee> RetrieveEmployees(string firstName, string lastName, string middleName) 
    { 
     var query = from employees in context.Employees 
      where (string.IsNullOrEmpty(firstName) || employees.FirstName == firstName) && 
        (string.IsNullOrEmpty(lastName) || employees.LastName == lastName) && 
        (string.IsNullOrEmpty(middleName) || employees.MiddleName == middleName) 
     select employees; 

     return query.ToList(); 
    } 
+0

非常に適切ではない: '&&'これは理解に関するものではありません|| '' –

+0

前に行く、それが評価についてです注文。 Cでは、 '&&'は '||'の前に評価され、SQLは同じことを行います: 'AND'は' OR'の前に評価されます。あなたは基本的に 'C1 OR(C2 AND C3)OR(C4 AND C5)OR C6'を書いています(そして、これらのカッコは実際には理解のためだけにあります) –

+0

あなたはそれを修正したのでもう分かりません。ご理解頂けるとありがたいです! –

関連する問題