zoukankan      html  css  js  c++  java
  • LINQ SelectMany代替for循环赋值,把联合查询的值赋值给第1个集合

        public class Employee
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    
        public class EmployeeFile
        {
            public int EmployeeId { get; set; }
            public string FileName { get; set; }
        }
    
        public class EmployeeDTO
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string FileName { get; set; }
        }
    
            static void Main(string[] args)
            {
                 List<Employee> employees = new List<Employee>()
                {
                 new Employee {Id = 1, FirstName   = "Joe", LastName    = "Rattz"},
                 new Employee {Id = 2, FirstName   = "Willam", LastName = "Gates"},
                 new Employee {Id = 3, FirstName   = "Anders", LastName = "Hejlsberg"},
                 new Employee {Id = 4, FirstName   = "David", LastName  = "Lightman"},
                 new Employee {Id = 101, FirstName = "Kevin", LastName  = "Flynn"}
                };
    
    
                List<EmployeeFile> employeeFiles = new List<EmployeeFile>()
                {
                 new EmployeeFile {EmployeeId = 1,  FileName    = "001.txt"},
                 new EmployeeFile {EmployeeId = 2,  FileName = "002.txt"},
                 new EmployeeFile {EmployeeId = 3,  FileName = "003.txt"},
                 new EmployeeFile {EmployeeId = 4,  FileName  = "004.txt"},
                 new EmployeeFile {EmployeeId = 101,  FileName  = "005.txt"}
                };
    
                var result =
                                (from e in employees
                                 join d in employeeFiles on e.Id equals d.EmployeeId
                                 select new EmployeeDTO { Id = e.Id, FirstName = e.FirstName, LastName = e.LastName, FileName = null }).ToList();
    
                Console.WriteLine("第1个集合:");
                foreach (var item in result)
                {
                    Console.WriteLine($"Id:{item.Id},FirstName:{item.FirstName},LastName:{item.LastName},FileName:{item.FileName}");
                }
    
                var objs = (from r in result
                            join d in employeeFiles on r.Id equals d.EmployeeId
                            select new EmployeeDTO
                            {
                                Id = r.Id,
                                FileName = d.FileName
                            }).ToList();
    
                 Console.WriteLine("关联的集合:");
                foreach (var item in objs)
                {
                    Console.WriteLine($"Id:{item.Id},FirstName:{item.FirstName},LastName:{item.LastName},FileName:{item.FileName}");
                }
    
                var objs2 = objs.SelectMany(d => result, (d, r) =>
                {
                    EmployeeDTO dto = r;
                    if (r.Id == d.Id)
                    {
                        r.FileName = d.FileName;
                        return dto;
                    }
                    else
                    {
                        dto = null;
                    }
    
                    return dto;
    
                }).Where(n => n != null).ToList();
    
                 Console.WriteLine("合并2个集合:");
                foreach (var item in objs2)
                {
                    Console.WriteLine($"Id:{item.Id},FirstName:{item.FirstName},LastName:{item.LastName},FileName:{item.FileName}");
                }
        }
    
  • 相关阅读:
    修改微信电脑版的字体
    今天把自己的ocr镜像开源了
    写点恐怖小说为自己打call
    分享一波目前写的最强的autohotkey 插件
    分享一个我改进过的ocr算法
    从git源码安装zabbix-agent
    windows bat更改系统时间 & 同步internet时间
    Jmeter执行多条Mysql语句报错
    性能测试图片总结
    Jmeter beanshell 生成手机号加密签名
  • 原文地址:https://www.cnblogs.com/tangge/p/12635415.html
Copyright © 2011-2022 走看看