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

Posted

技术标签:

【中文标题】如何获取数据表中两列之间的数据?【英文标题】:How to get data between two columns in datatable? 【发布时间】:2016-01-14 09:44:06 【问题描述】:

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

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

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

emp   pen
782   1
672   2
677   3
56    1

【问题讨论】:

有什么办法解决吗?如何创建一个 sql 查询does 并用它填充 DataTable? for (int i = 0; i < penaltyEmp.Rows.Count; i++) if(!string.IsNullOrEmpty(penaltyEmp.Rows[i]["tot-min"].ToString())) penaltyEmp.Rows[i]["latepen"]=penaltyrule.AsEnumerable().Where(int.Parse(penaltyEmp.Rows[i]["tot-min"].ToString())=> 如果有多个怎么办? @TimSchmelter: multiple 什么? @just_name: 多个匹配规则 【参考方案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();

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何获取数据表中两列之间的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何检索表的值以获取sql中两列的最大值

如何找到两列数据之间的差异?

如何计算Python Pandas中两列之间的日期差异[重复]

pyspark数据框中两列之间的时间差

如何让excel中两列数据互相找相同字段自动对齐

如何根据数据透视表中两列(两个外键)中的 ID 返回相关模型?