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

本文关键字:两列 数据 之间 数据表 何获取 获取 | 更新日期: 2023-09-27 18:30:24

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

1-惩罚规则

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

2- 处罚

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

我想使用 LINQ 为每个用户获取笔

我的意思是tot-min from-minto-min选择之间的位置 pen

我想要具有以下结果的数据表:

emp   pen
782   1
672   2
677   3
56    1

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

您可以使用此查询:

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

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

如果您使用的是 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()
                 });