繁体   English   中英

在数据表中的多个列上不同

[英]Distinct on multiple columns in datatable

试图做一个SQL查询( SELECT DISTINCT (first,second),third FROM table )会做什么,但是我正在用LINQ和一个数据SELECT DISTINCT (first,second),third FROM table来做。


编辑

SQL应该看起来像一个Mysql

select first, second, third FROM table group by first, second


DataTable secondTable = new DataTable();
secondTable.Columns.Add("name", typeof(string));
secondTable.Columns.Add("date", typeof(string));
secondTable.Columns.Add("clockIn", typeof(string));
secondTable.Columns.Add("clockOut", typeof(string));

var t4 = (from a in firstTable.AsEnumerable()
select new
{
    name = a.Field<string>("name"),
    date = a.Field<string>("date"),
    clockIn = a.Field<string>("clockIn"),
    clockOut = a.Field<string>("clockOut")
}).Distinct();

var t5 = (from a in firstTable.AsEnumerable()
select new
{
    name = a.Field<string>("name"),
    date = a.Field<string>("date")
}).Distinct();

var t6 = (from d in t5
          join a in t4
          on new
          {
              d.name,
              d.date
          }
          equals new
          {
              a.name,
              a.date
          }
          select secondTable.LoadDataRow(
          new object[]
          {
               d.name,d.date,a.clockIn,a.clockOut
          }, false)).ToList();

ViewBag.Data = secondTable;

该代码的作用是,将t4t5连接到t6而没有任何排除。 虽然我的愿望是所有的行t4存在于t5应该加入t6上(名称,日期),并从所有行的基础上, t5不存在在t4应被排除在外。 谁能帮忙吗?

从您的评论中,您可以按所需字段分组,然后进行分组。

您可以按时钟输入或时钟输出进行排序,以获得较少的“随机”结果。

var t6 = firstTable.AsEnumerable()
                   .GroupBy(a => new {
                                     name = a.Field<string>("name"),
                                     date = a.Field<string>("date")
                                     }
                            )
                   .Select(g => g.First())
                   //or Select(g => g.OrderBy(a => a.Field<string>("clockIn")).First()
                   .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM