C#两个对象集合常用lambda操作

定义对象

public class DATA_ITEM
{
	public string LOT_ID { get; set; }
	public int QTY { get; set; }
}

定义集合

//数据源list
private static List<DATA_ITEM> A_list = new List<DATA_ITEM>();
private static List<DATA_ITEM> B_list = new List<DATA_ITEM>();

//临时list
private static List<DATA_ITEM> Merge_list = new List<DATA_ITEM>();
private static List<DATA_ITEM> Atemp_list = new List<DATA_ITEM>();
private static List<DATA_ITEM> Btemp_list = new List<DATA_ITEM>();

1、合并集合(两不相同)

Merge_list = A_list.Concat(B_list).ToList();

2、合并集合并去除重复项(并集)

Merge_list = A_list.Concat(B_list.Where(a => !A_list.Exists(b => b.LOT_ID == a.LOT_ID && b.QTY == a.QTY))).ToList();

3、集合比对(找出各自不相同的 差集)

Atemp_list = A_list.Where(a => !B_list.Exists(b => b.LOT_ID == a.LOT_ID && b.QTY == a.QTY)).ToList();

Btemp_list = B_list.Where(a => !A_list.Exists(b => b.LOT_ID == a.LOT_ID && b.QTY == a.QTY)).ToList();

4、集合共有的部分(交集)

Merge_list = A_list.Where(a => B_list.Exists(b => b.LOT_ID == a.LOT_ID && b.QTY == a.QTY)).ToList();

补:
List ListA = new List();
List ListB = new List();
List ListResult = new List();

ListResult = ListA.Distinct().ToList();//去重
ListResult = ListA.Except(ListB).ToList();//差集
ListResult= ListA.Union(ListB).ToList(); //并集
ListResult = ListA.Intersect(ListB).ToList();//交集

//lambda多条件查询 where连接select

var num = removeData_list.ToList().Max(p => Convert.ToInt32(p.TIME_DAY));
List c_status = removeData_list.Where(p => p.TIME_DAY == num.ToString()).ToList().Select(p => p.STATUS).ToList();
c.STATUS = c_status[0];

string[] DN_NO = rptDatas.Select(o => o.DN_NO).Distinct().ToList().Where(it => it != “”).ToArray();

ADD 20210807
截取特定符号之前的数据

for (int i = 0; i < Tres_list.Count; i++)
{
	TotalData_list.Where(p => p.RES_ID.Split('-')[0] == Tres_list[i]).ToList();
}

ADD 20211111
设置列宽

//设置列宽
for (int i = 0; i < headList.Count(); i++)
{
	sheet1.AutoSizeColumn(i);
}

ADD 20211204
多字段排序

//倒序
list.OrderByDescending(i => i.a).ThenByDescending(i => i.b);

//顺序
list.OrderBy(i => i.a).ThenBy(i => i.b);

ADD 20211208
字典取值

//表数据
for (int i = 0; i < lot.CT.Count; i++)
{
    row = sheet.CreateRow(i + 1);

    KeyValuePair<string, double> kv = lot.CT.ElementAt(i);

    for (int j = 0; j < 2; j++)
    {
        cell = row.CreateCell(j);
    }

    row.GetCell(0).SetCellValue(kv.Key);
    row.GetCell(1).SetCellValue(kv.Value);
}

ADD 20220627
oracle列转行 UNPIVOT

SELECT DATA_1     RUN,
               DATA_2     REWORK,
               DATA_3     SETUP,
               DATA_4     PM,
               DATA_5     DOWN,
               DATA_6     IDLE,
               DATA_7     LOTCHANGE,
               DATA_8     LENDING,
               DATA_9     STOP
          FROM MRPTCSTDAT
         WHERE     EDI_NAME = 'EDI_567_EquipStatusChart'
               AND KEY_1 = :RES_ID
               AND WORK_DATE = :TIME

在这里插入图片描述

SELECT *
  FROM (SELECT DATA_1     RUN,
               DATA_2     REWORK,
               DATA_3     SETUP,
               DATA_4     PM,
               DATA_5     DOWN,
               DATA_6     IDLE,
               DATA_7     LOTCHANGE,
               DATA_8     LENDING,
               DATA_9     STOP
          FROM MRPTCSTDAT
         WHERE     EDI_NAME = 'EDI_567_EquipStatusChart'
               AND KEY_1 = :RES_ID
               AND WORK_DATE = :TIME)
       UNPIVOT (STATUS_TIME
               FOR STATUS
               IN (RUN,
                  REWORK,
                  SETUP,
                  PM,
                  DOWN,
                  IDLE,
                  LOTCHANGE,
                  LENDING,
                  STOP))

在这里插入图片描述

oracle行转列 PIVOT

SELECT EVENT_ID, MAX (NEW_HIST_SEQ) HIST_SEQ
            FROM E812RESHIS
           WHERE     RES_ID = :RES_ID
                 AND TRAN_TIME < :S_TIME
                 AND EVENT_ID IN ('567_START', '567_END')
        GROUP BY EVENT_ID

在这里插入图片描述

SELECT *
  FROM (  SELECT EVENT_ID, MAX (NEW_HIST_SEQ) HIST_SEQ
            FROM E812RESHIS
           WHERE     RES_ID = :RES_ID
                 AND TRAN_TIME < :S_TIME
                 AND EVENT_ID IN ('567_START', '567_END')
        GROUP BY EVENT_ID)
       PIVOT (MAX (HIST_SEQ)
             FOR EVENT_ID
             IN ('567_START' AS "567_START", '567_END' AS "567_END"))

在这里插入图片描述
ADD 20220719
Oracle日期格式yyyymmdd格式化为yyyy-mm-dd

问题:日期展示为CREATE_TIME = 202008280800需要展示为2020-08-28
解决:select TO_CHAR (TO_DATE (SUBSTR (CREATE_TIME, 0, 8), 'yyyyMMdd') - 1,'YYYY-MM-DD') DATE from dual
结果展示:2020-08-28

ADD 20240425
1、向上进位取整。Math.Ceiling
例如: Math.Ceiling(32.6)=33; Math.Ceiling(32.0)=32;

2、向下舍位取整。Math.Floor
例如: Math.Floor(32.6)=32;

3、按指定位数的小数进行四舍五入。Math.Round
例如:Math.Round(36.236,2)=36.24; Math.Round(36.232,2)=36.23;

日常用到,遂记录,自用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值