对集合进行多条件属性分组

实体类:

public class Person
    {
        public int ID { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 住址
        /// </summary>
        public string Addr { get; set; }
        /// <summary>
        /// 国家
        /// </summary>
        public string County { get; set; }
        /// <summary>
        /// 性别 F M
        /// </summary>
        public string  Sex { get; set; }
    }

实现:
class Program
    {
        static void Main(string[] args)
        {
            var lst = new List<Person> { 
             new Person{ ID=1,Name="AA", County="CN", Addr="JD1", Sex="F"},
             new Person{ ID=2,Name="BB", County="CN", Addr="JD1", Sex="M"},
             new Person{ ID=3,Name="CC", County="US", Addr="JD2", Sex="F"},
             new Person{ ID=4,Name="DD", County="US", Addr="JD2", Sex="M"},
             new Person{ ID=5,Name="EE", County="HK", Addr="JD3", Sex="F"},
             new Person{ ID=6,Name="FF", County="HK", Addr="JD4", Sex="M"},
             new Person{ ID=7,Name="GG", County="HK", Addr="JD5", Sex="F"},
            };

            var gps_1 = lst.GroupBy(x => (GetUnicIdetity(x.County)));//仅仅按照国家分组
            var gps_2 = lst.GroupBy(x => GetUnicIdetity(x.County, x.Sex));//按照国家+性别进行分组

            Console.WriteLine("单属性分组:");
            foreach (var g in gps_1)
            {
                Console.WriteLine(g.Key);
            }
            Console.WriteLine("下面是按照符合组键进行的分组:");
            foreach (var g in gps_2)
            {
                Console.WriteLine(g.Key);
            }

            Console.ReadKey();
        }

        private static string GetUnicIdetity(params object[] paras)
        {
            StringBuilder sb_result = new StringBuilder("");
            char spliterChar=‘-‘;
            if (null!=paras&&paras.Count()>0)
            {
                foreach (var item in paras)
                {
                    sb_result.Append(item).Append(spliterChar);
                }
                //移除掉最后一个-,也可以不移除
                if (sb_result.Length>1)
                {
                    sb_result.Remove(sb_result.Length - 1, 1);
                }

            }
            return sb_result.ToString();
        }
    }
				
时间: 2024-10-29 21:50:19

对集合进行多条件属性分组的相关文章

《Entity Framework 6 Recipes》中文翻译系列 (18) -----第三章 查询之结果集扁平化和多属性分组

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-14  结果集扁平化 问题 你有一对多关联的两个实体,你想通过一个查询,获取关联中的两个实体的扁平化投影.扁平化或者叫压缩,这是不规范的叫法.它是指一个有父类和子类的对象图,被投影到一个单独的类中. 解决方案 假设你有一对拥有一对多关联的实体,如图3-15所示的模型. 图3-15 模型中,一个代表助理的Associate的实体类型和一个代表助理工资历史的AssociateSalary实体

python基础一 -------如何在列表字典集合中根据条件筛选数据

如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) 1 filter(lambda x:x>0,data) 3,列表推倒式 4,效率对比:还是列表推导式稍高 二:字典 1,跟列表类似,推导式 先生成随机的字典(key从1-20) 过滤掉value是负数的值 三:集合 随机生成10个元素的集合 过滤掉小于0的元素,跟字典类似

一个类在另一个类中以集合形式声明为属性时应该注意的问题

标题:一个类在另一个类中以集合形式声明为属性时应该注意的问题,先解释一下,看下面的代码吧 [Serializable] public class MO_T_sj_quest { public List<MO_T_sj_answer> AnswerList { get; set; } public List<MO_T_sj_answer> IDList { get; set; } public List<MO_T_sj_quest_bind> BindList { get

java按照集合中元素的属性进行排序示例代码

public class Student { private String name; private int age; private int id; public Student() {  super(); } public Student(String name, int age, int id) {  super();  this.name = name;  this.age = age;  this.id = id; } public String getName() {  retur

【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; import java.lang.reflect.Field; import java.util.*; /** * @ClassName Test * @Description 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 * @Author sxd

MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)

一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <resultMap type="Student" id="StudentMapper"> <result column="stuname2" property="stuname"/> </resultMap>

正则表达式——字符类、分支条件、分组

思路来源:http://deerchao.net/tutorials/regex/regex.htm#alternative 感谢deerchao,写的比菜鸟教程好太多了.现在感觉菜鸟教程可能就是翻译了一些doc,而且是思路结构不太清晰的doc…… 进入正题,主要还是看了教程后自己的理解. 字符类 字符类,即为如 [aeiou].[1-9].[19].[.?!] 等用英文中括号括起字符的字符集合. 解释与辨析: [aeiou]:匹配a 或 e 或 i 或 o 或 u . [0-9]:匹配 0 或

C# 使用Dictionary、linq实现根据集合里面的字符串进行分组

分组两种方法: List<string> list = new List<string>() { "1_32", "2_10", "1_8", "1_25", "2_3", "3_5", "5_15", "3_16" }; //对上面集合里面的字符串按照“_”进行分组. #region //使用字典,键值对集合保存分组数据.

DataGridView 绑定list类, 如何只显示list集合中类的部分属性

一,显示实体的全部属性 当DataGridView的列名就是Class T的属性的时候,这时,只需要绑定数据源,然后手动更改列名就好. <span style="font-size:14px;"> '将dt转换为泛型集合 myList = EntityHelper.convertToList(Of EntityUser)(dt) TextBox1.Text = myList.Count '在文本框里面显示出查询到的教师数目 If (myList.Count > 0)