如何获取数据表中两列之间的数据?

How to get data between two columns in datatable?

如果我有两个这样的数据 tables :

1-惩罚规则

  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 BETWEEN from-min AND to-min SELECT pen

我想要数据 table,结果如下:

emp   pen
782   1
672   2
677   3
56    1

像这样的东西应该在 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 };

您可以使用此查询:

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();

如果你正在使用 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()
                 });