• C#中两个List<TModel>中根据指定条件--判断并获取不同数据的数据集合2


    方式一:Linq

    List<Test> list = new List<Test>();
                list.Add(new Test { score = 10, name = "张君宝" });
                list.Add(new Test { score = 20, name = "刘惜君" });
                list.Add(new Test { score = 20, name = "刘惜君" });
                list.Add(new Test { score = 30, name = "八戒" });
    
                int total = (from temp in list
                             where temp.name == "刘惜君"
                             select temp.age).Count();
    
                int score = (from temp in list
                             where temp.name == "刘惜君"
                             select temp.score).Sum();
                this.textBox1.Text = "刘惜君:" + total + "人" + score + "score";
    

    C#中两个List<TModel>中根据指定条件获取不同对象 续

    原始需求:已经插入的数据不再重复插入(所有数据中排除已有数据,不存在数据以新对象形式存储在对象三中)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace StartExe
    {
        public partial class Form1 : Form
        {
            private List<Test> AllData = new List<Test>();
            private List<Test> PartData = new List<Test>();
            public Form1()
            {
                InitializeComponent();
    
                AllData.Add(new Test { score = 10, name = "001" });
                AllData.Add(new Test { score = 20, name = "002" });
                AllData.Add(new Test { score = 30, name = "003" });
                AllData.Add(new Test { score = 40, name = "004" });
    
                PartData.Add(new Test { score = 30, name = "003" });
                PartData.Add(new Test { score = 40, name = "004" });
            }
    
            //方法:Linq
            private void btnLinq_Click(object sender, EventArgs e)
            {
                LinqMethod(AllData, PartData);
            }
    
            private void LinqMethod(List<Test> allData, List<Test> partData)
            {
                var query = from a in allData.AsEnumerable()
                            join p in partData.AsEnumerable()
                            on a.score equals p.score into tmp
                            from current in tmp.DefaultIfEmpty()
                            where current == null
                            select new
                            {
                                Name = a.name,
                                SCORE = a.score,
                            };
    
                string str = string.Empty;
                foreach (var item in query)
                {
                    str += item.SCORE + "==" + item.Name + "
    ";
                }
    
                this.txtLinq.Text = "linq方式:
    " + str + query.Count().ToString();
                //MessageBox.Show(str);
            }
    
            //方法:Lambda
            private void btnLambda_Click(object sender, EventArgs e)
            {
                LambdaMethod(AllData, PartData);
            }
    
            private void LambdaMethod(List<Test> AllData, List<Test> PartData)
            {
                var query = AllData.AsEnumerable()
                    .GroupJoin
                    (
                        PartData.AsEnumerable(),
                         x => x.score, y => y.score, (x, y) => y.DefaultIfEmpty()
                            .Where(w => w == null).
                            Select(z => new { SCORE = x.score, Name = x.name })
                     ).SelectMany(x => x);
    
                string str = string.Empty;
                foreach (var item in query)
                {
                    str += item.SCORE + "==" + item.Name + "
    ";
                }
    
                this.txtLambda.Text = "lambda方式:
    " + str + query.Count().ToString();
                //MessageBox.Show(str);
            }
        }
    
        public class Test
        {
            public int age { get; set; }
            public string name { get; set; }
            public int score { get; set; }
        }
    }
    

    运行效果如下所示:

  • 相关阅读:
    C++前置声明的几种方式
    C++中看上去有些奇怪的惯用法:int和bool之间的转换
    在线文档生成工具 mkdocs 使用方法
    对Java前四章的感受
    类与对象的学习之路
    201671010133 201620172 《java程序设计》 初学java!
    神奇的位运算及其简单应用
    mysql 和 mongo db 语法对比
    phpMyAdmin 配置
    mongoDB 基础指令
  • 原文地址:https://www.cnblogs.com/YYkun/p/11649125.html
Copyright © 2020-2023  润新知