2012-03-30 18 views
21

mam DataTable z dwoma kolumnami,Zapytania DataTable z którym warunek

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

Chcę kwerendy DataTable, przeciwko kolumnie EmpID i Empname.

Na przykład, chcę uzyskać wartości gdzie

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

@QQping, nie mogłem tego zrobić. Brak pomysłu. Właśnie zacząłem kwerendę w datatable – Anuya

Odpowiedz

29

Coś takiego ...

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; 

Zobacz również LINQ query on a DataTable

+0

pominięte, w jaki sposób można uzyskać liczbę liczbę zwracanych wierszy. Dzięki – Anuya

+1

@Anuya - res.Count? – Bridge

+0

Przepraszam, nie mogłem. Otrzymuję ten błąd, gdy konwertuję res.count na Int ... {"Określony rzut nie jest prawidłowy."} {System.SystemException {System.InvalidCastException} – Anuya

10

coś takiego? :

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

Czy tego szukasz?

15

Można to zrobić z Linq, jak mamoo pokazał, ale oldies są dobre: ​​

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

Wybacz moją ciekawość, ale czym jest "EmpId> 2"? –

+0

@AnarKhalilov To tylko kilka przykładów składni. Nie wymagano też "podobnego". –