首页 > 其他分享 >Func<T, object> 选择器使用

Func<T, object> 选择器使用

时间:2024-01-26 09:34:51浏览次数:27  
标签:++ propertyNames propertyInfos person Func 使用 var GetValue 选择器

感觉有点类似于委托,在一开始先绑定,到后面使用LINQ语句时再触发(不知道是不是这样,先记录一下)

 

public static void Main()
    {
        List<int> numbers = new List<int>() {10, 20, 30, 40, 50};
        
        // 创建一个 Func<T, object> 来获取大于20的元素
        Func<int, bool> selector = (num) => num > 20;
        
        // 使用 LINQ 的 Where 方法应用该选择器
        var result = numbers.Where(selector);
        
        foreach (var item in result)
        {
            Console.WriteLine(item);
        }
    }

输出 :30  40  50

    // 使用 LINQ 进行多个分组的动态分组的方法
        public  static IEnumerable<IGrouping<object, ScmPurbillDtl>> GroupByDynamicProperties(List<ScmPurbillDtl> people, List<string> propertyNames)
        {
            // 利用反射获取属性信息
            var propertyInfos = propertyNames.Select(p => typeof(ScmPurbillDtl).GetProperty(p)).ToArray();

            // 使用匿名类型作为分组的键
            var keySelector = CreateKeySelector(propertyInfos, propertyNames);

            // 使用 LINQ 进行多个分组的动态分组
            var groupedPeople = people.GroupBy(keySelector);
            return groupedPeople;
        }

        // 创建匿名类型的选择器
        public static Func<ScmPurbillDtl, object> CreateKeySelector(PropertyInfo[] propertyInfos, List<string> propertyNames)
        {

            return person =>
            {
                int i = 0;
                // 创建匿名类型的实例
                var key = new
                {
                    Flowid = propertyInfos[i++].GetValue(person, null),
                    Vendorid = propertyInfos[i++].GetValue(person, null),
                    Balancetype = propertyInfos[i++].GetValue(person, null),
                    Logicwarehouseid = propertyInfos[i++].GetValue(person, null),
                    Hdrid = propertyNames.Contains("Hdrid") ? propertyInfos[i++].GetValue(person, null) : "",
                    Valuename = propertyNames.Contains("Valuename") ? propertyInfos[i++].GetValue(person, null) : "",
                };

                return key;
            };
        }

 

标签:++,propertyNames,propertyInfos,person,Func,使用,var,GetValue,选择器
From: https://www.cnblogs.com/my2020/p/17988611

相关文章

  • 程序启停分析与进程常用API的使用
    进程是程序运行的实例,操作系统为进程分配独立的资源,使之拥有独立的空间,互不干扰。空间布局拿c程序来说,其空间布局包括如下几个部分:数据段(初始化的数据段):例如在函数外的声明,inta=1blockstartedbysymbol(未初始化的数据段):例如在函数外的声明,intb[10]栈:保存局部作用域......
  • 层次选择器
    后代选择器:空格bodyp{background-color:red;}子选择器:>body>p{background-color:red;}相邻兄弟选择器(向下选择一个):+.active+p{background-color:red;}通用选择器(向下选择多个):~.active~p{background-color:red;}基础代码:<!DOC......
  • 关于使用c++制作蓝牙连接,Windows版本
    1#define_CRT_SECURE_NO_WARNINGS2#pragmawarning(disable:4995)3#include<iostream>4#include<string>5#include<vector>6#include<sstream>7#include<iomanip>8#include<windows.h......
  • django框架的使用及其梳理系列二
    路由源码流程#urls.py中ctrl+鼠标点击path=partial(_path,Pattern=RoutePattern)#partial的功能:fromfunctoolsimportpartialdef_path(v1,v2,v3):returnv1+v2+v3path=partial(_path,v3=55)print(path(11,22))_path:def_path(route,view,kwargs......
  • 记一次Spring retry的使用
    问题背景调用三方平台接口偶尔会访问不到,导致了逻辑错误具体描述由于工作职责重新划分,我新接手维护了一个项目,这个项目已经开发完成,项目中需要和第三方平台进行对接,主要是我方向对方推送数据但是刚接手没几天,实施同事就反馈过来一个问题,我们推送过去的数据在对方那边显示......
  • 使用 JavaScript 宏删除文档中的特定注释
    有时只需要删除文档中的注释,要怎么快速做到呢?在这篇文章中,我们将会展示如何为ONLYOFFICE创建一个简单的宏,来删除某些特定的或所有评论,从而保持协作的重点和整洁。什么是ONLYOFFICE 宏如果您是一名资深MicrosoftExcel用户,那么相信您已对于VBA宏非常熟悉了。这些宏是帮助您自......
  • 一文深度解读多模态大模型视频检索技术的实现与使用
    当视频检索叠上大模型Buff。:::hljs-right万乐乐|技术作者:::视频检索,俗称“找片儿”,即通过输入一段文本,找出最符合该文本描述的视频。随着视频社会化趋势以及各类视频平台的快速兴起与发展,「视频检索」越来越成为用户和视频平台实现高效查找视频、定位目标内容的新需求。......
  • linux系统中命令的使用方式和技巧(一)
    1.1linux的命令格式command[-option][parameter]说明:command:命令名,相应功能的英文单词或单词的缩写[-option]:选项,可用来对命令进行控制,也可以省略,[]代表可选parameter...:传给命令的参数,可以是零个一或多个1.2关于命令的文档可以查看--help一般是Linux命令自带的帮助信息,并不是......
  • 矩阵号:日入100+,八大提示词(Prompt)使用技巧
    最近在搞头条矩阵,发现自己的指令写的太烂了,一个指令将会决定你的写作质量。收益比较拉垮,50个号收益好的,也就这么几个号。于是我扒了一些提示词的操作技巧,分享一下自己的学习心得。先说理论知识,实操放文章最后。我们与GPT沟通交流时,可以用到乔哈里()沟通视窗模型,它分为......
  • Redis篇-redis使用场景-缓存-缓存雪崩-04
    1缓存雪崩缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。解决方案:给不同Key的TTL添加随机值;利用Redis集群提高服务的可用性;哨兵模式、集群模式给缓存业务添加降级限流策略;ngxin或springcloudGateway给业务添加......