LINQ tip #4: Dùng WHERE


Khi xây dựng các form tìm kiếm với SQL, chúng ta vẫn thường phải xây dựng một chuỗi SQL với nhiều điều kiện trong WHERE, theo kiểu như:

string sql = "select * from Customers";
string where = "";
if (txtCustomerName.Text != "")
    where += String.Format("CustomerName = {0}", txtCustomerName.Text);
if (where != "")
    sql += " WHERE " + where;

MyDataGrid.DataSource = ... <kết quả trả về bởi câu truy vấn>

Trong LINQ, nếu muốn xây dựng một câu truy vấn LINQ kiểu như vậy, bạn có thể sử dụng câu lệnh Where() kết hợp với biểu thức LAMBDA, với ví dụ trên tôi có thể viết như sau:

DataClasses1DataContext dc = new DataClasses1DataContext();
var q = from p in dc.Products select p;
if (txtCustomerName.Text != "")
    q = q.Where(p => p.Name != txtCustomerName.Text);
MyDataGrid.DataSource = q;

10 thoughts on “LINQ tip #4: Dùng WHERE

  1. Anh Nam cho em hỏi
    Nếu dùng kiễu biểu thức như anh hỏi thì cứ mỗi lần q.where, các điều kiện lại được nối với nhau bằng && (ko thấy type ra nhưng hình như LINQ tự hiểu là &&)
    Vậy muốn các điều kiện theo kiểu or thì sao anh ? >”<
    Em cảm ơn anh ạ

  2. a` Chào bạn, cho mình hỏi cái biểu thức lamda…Mình không hiểu lắm.Bạn có thể giải thích nó cho mình hiểu được không bạn.
    Thanks

  3. @Khách: trường hợp dùng OR thì em phải viết chung trong 1 câu:
    q = q.Where((p) => ((p.City != txtCity1.Text) || (txtCity1.Text == “”))
    || ((p.City != txtCity2.Text) || (txtCity2.Text == “”)));
    Ví dụ này cho phép em tìm các khách hàng ở thành phố trong ô City1 hay City2.

  4. Biểu thức lambda này hỗ trợ trên C# 3.0 nhưng chưa hỗ trợ với Visual Basic 9.0 hic. Thế thì lập trình thế nào được nhỉ. Mình quen dùng VB

  5. Anh Nam cho em hỏi.
    Em có một câu lệnh như sau

    …..
    dbDataContext db = new dbDataContext(@”C:\NORTHWND.MDF”);

    ….
    Em đã cho dữ liệu ra datagrid được rồi, nhưng em hỏi nếu như câu lệnh trên thì không phải cài SQl server ạ. Hay đó chỉ là một ánh xạ tới cái file đó thôi. Còn khi chạy bắt buộc phải cài SQLserver

  6. Đây là cách em dùng trực tiếp 1 file DB với SQL Server Express, phiên bản này mặc nhiên được cài chung với Visual Studio.

  7. Em đang dùng visual studio team 2008 sp1.
    Như vậy là khi chạy phải cần cài SQl server hả anh.

    Giả sử ở máy khách cài SQl express, mình chỉ cần copy file northwnd.mdf vào đường dẫn như trên là chạy dc à a.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s