Đào Hải Nam

LINQ tip #4: Dùng WHERE

Posted in Microsoft .NET by namdh on 14/06/2009

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;
Tagged with: , ,

10 phản hồi

Subscribe to comments with RSS.

  1. Khách said, on 24/06/2009 at 02:22

    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. namdh said, on 24/06/2009 at 11:08

    Hờ hờ, nhất thời chưa nghĩ ra…

  3. Khách said, on 02/07/2009 at 11:39

    Anh ơi, cái kia em hỏi sao rồi ạ ? >”<

  4. Y Học said, on 21/07/2009 at 21:39

    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

  5. namdh said, on 22/07/2009 at 14:58

    Bài này có giải thích về biểu thức lambda: http://namdh.wordpress.com/2009/07/22/lambda-expression/

  6. namdh said, on 22/07/2009 at 15:24

    @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.

  7. LTH said, on 11/09/2009 at 11:49

    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

  8. Khách said, on 20/09/2009 at 21:22

    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

  9. namdh said, on 21/09/2009 at 07:28

    Đâ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.

  10. Nguyễn Anh Đức said, on 21/09/2009 at 10:38

    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.


Để lại hồi âm