c#
  • linq
  • datatable
  • 2012-03-30 31 views 21 likes 
    21

    Tôi có một DataTable với hai cột,Truy vấn DataTable với nơi mà điều kiện

    Column 1 = "EmpID" 
    Column 2 = "EmpName" 
    

    tôi muốn truy vấn DataTable, chống lại các cột EmpIDEmpname.

    Ví dụ, tôi muốn nhận được các giá trị nơi

    (EmpName != 'abc' or EmpName != 'xyz') and (EmpID = 5) 
    
    +0

    @QQping, tôi couldnt làm điều đó. Không ý kiến. Chỉ cần bắt đầu truy vấn trong datatable – Anuya

    Trả lời

    29

    Something như thế này ...

    var res = from row in myDTable.AsEnumerable() 
    where row.Field<int>("EmpID") == 5 && 
    (row.Field<string>("EmpName") != "abc" || 
    row.Field<string>("EmpName") != "xyz") 
    select row; 
    

    Xem thêm LINQ query on a DataTable

    +0

    bị bỏ lỡ, làm cách nào tôi có thể nhận được số lượng hàng được trả về. Cảm ơn – Anuya

    +1

    @Anuya - res.Count? – Bridge

    +0

    xin lỗi, tôi không thể. Tôi nhận được lỗi này khi tôi chuyển đổi res.count để Int ... {"Specified cast là không hợp lệ."} {System.SystemException {System.InvalidCastException} – Anuya

    10

    một cái gì đó như thế này? :

    DataTable dt = ... 
    DataView dv = new DataView(dt); 
    dv.RowFilter = "(EmpName != 'abc' or EmpName != 'xyz') and (EmpID = 5)" 
    

    Đó có phải là những gì bạn đang tìm kiếm không?

    15

    Bạn có thể làm điều đó với LINQ, như mamoo thấy, nhưng oldies là tốt quá:

    var filteredDataTable = dt.Select(@"EmpId > 2 
        AND (EmpName <> 'abc' OR EmpName <> 'xyz') 
        AND EmpName like '%il%'"); 
    
    +0

    Tha thứ sự tò mò của tôi nhưng 'EmpId> 2' là gì? –

    +0

    @AnarKhalilov Nó chỉ là một vài ví dụ về cú pháp. 'Giống như' cũng không được yêu cầu. –

    Các vấn đề liên quan