2016-01-14 2 views
0

Если у меня есть две таблицы данных, как это:Как получить данные между двумя столбцами в datatable?

1-penaltyrule

ser from-min to-min pen 
    1  1   55  1 
    2  56  90  2 
    3  91  null 3 

2- penaltyEmp

ser emp tot-min 
    1 782 2 
    2 672 67 
    3 677 92 
    4 56 7 

Я хочу, чтобы получить ручку для каждого пользователь с LINQ

я имею в виду, где tot-minМЕЖДУfrom-minИto-minВЫБРАТЬ pen

Я хочу, чтобы данные таблицы со следующим результатом:

emp pen 
782 1 
672 2 
677 3 
56 1 
+0

Любые усилия, чтобы решить эту проблему? Как создать sql-запрос _does_ и заполнить DataTable? –

+0

'for (int i = 0; i } } ' –

+0

Что делать, если их несколько? –

ответ

2

Вы можете использовать этот запрос:

var penaltyEmps = penaltyEmp.AsEnumerable() 
    .Select(r => new { ser = r.Field<int>("ser"), emp=r.Field<int>("emp"), tot_min=r.Field<int>("tot-min"), row = r }); 
var penaltyrules = penaltyrule.AsEnumerable() 
    .Select(r => new { ser = r.Field<int>("ser"), from_min=r.Field<int>("from-min"), to_min=r.Field<int>("to-min"), row = r }); 

DataTable tblResult = penaltyEmps 
    .Select(x => new 
    { 
     penaltyEmp = x, 
     matchingRules = penaltyrules.Where(x2 => x.tot_min >= x2.from_min && x.tot_min <= x2.to_min) 
    }) 
    .Where(x => x.matchingRules.Any()) 
    .Select(x => x.penaltyEmp.row) 
    .CopyToDataTable(); 
0

Что-то, как это должно работать в LINQ для вас: (Не забудьте включить пространство имен System.Linq).

var results = from emp in context.penaltyEmp 
        join rule in context.penaltyRule on emp.ser equals rule.ser 
        where emp.tot-min > rule.from-min && emp.tot-min < rule.to-min 
        select new { emp = emp.emp, pen = rule.pen }; 
0

вы можете использовать это, если вы используете EF

var data=(from a in db.penaltyEmp 
      select new{ 
        emp= a.emp, 
        pen= db.penaltyrule.Where(d=>d.from-min>a.tot-min && d.to-min==null?true:(d.to-min>a.tot-min)).Select(d=>d.pen).firstOrDefault() 
       }); 
Смежные вопросы