2012-03-30 4 views
21

У меня есть DataTable с двумя столбцами,Datatable с Запросы где условия

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

Я хочу чтобы запросить DataTable, против колонны EmpID и Empname.

Например, я хочу, чтобы получить значения, где

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

@QQping, я не смог сделать это. Без понятия. Просто начал запрашивать в datatable – Anuya

ответ

29

Что-то вроде этого ...

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; 

См.также LINQ query on a DataTable

+0

пропущенный, как я могу получить количество возвращаемых строк. Спасибо – Anuya

+1

@Anuya - res.Count? – Bridge

+0

извините, я не смог. Я получаю эту ошибку, когда я конвертирую res.count в Int ... {"Указанный приведение недействителен."} {System.SystemException {System.InvalidCastException} – Anuya

10

что-то вроде этого? :

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

Это то, что вы ищете?

15

Вы можете сделать это с Linq, как показал mamoo, но oldies тоже хороши:

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

Pardon мое любопытство, но что такое 'EmpId> 2' для? –

+0

@AnarKhalilov Это всего лишь несколько примеров синтаксиса. «Подобного» тоже не просили. –