linq实现取List中每个分类的一条随机数据

metheonline 2016-10-08 11:03:06
比如 :集合中有 a,b,c,d四个分类,每个分类有n条数据,每次随机取4条数据,每个分类一条,用linq怎么实现呢?
...全文
1062 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
metheonline 2016-10-10
  • 打赏
  • 举报
回复
谢谢 hanjun0612 版主的解答。看到结果就觉得非常简单了,努力学习linq…… 这样就可以查询指定分类的1条随机数据了,先OrderBy 后GroupBy ,否则查询出的数据每次都是一样的 var q = u.Where(x => arr_uType.Contains(x.uType)).OrderBy(x => Guid.NewGuid()).GroupBy(x => x.uType).Select(x => x.FirstOrDefault()).ToList();
正怒月神 2016-10-10
  • 打赏
  • 举报
回复
这是模型,uType就是分类了。
public class UserInfo
        {
            public int id { get; set; }
            //分类
            public int uType { get; set; }
            public string name { get; set; }
        }
正怒月神 2016-10-10
  • 打赏
  • 举报
回复
List<UserInfo> u = new List<UserInfo>(){
                new UserInfo(){id=1,name="1",uType=1},
                new UserInfo(){id=2,name="2",uType=1},
                new UserInfo(){id=3,name="3",uType=1},
                new UserInfo(){id=11,name="11",uType=2},
                new UserInfo(){id=12,name="12",uType=2},
                new UserInfo(){id=13,name="13",uType=2},
                new UserInfo(){id=111,name="111",uType=3},
                new UserInfo(){id=112,name="112",uType=3},
                new UserInfo(){id=113,name="113",uType=3},
                new UserInfo(){id=1111,name="1111",uType=4},
                new UserInfo(){id=1112,name="1112",uType=4},
                new UserInfo(){id=1113,name="1113",uType=4},
            };


            var q = u.GroupBy(x => x.uType).OrderBy(x=>Guid.NewGuid()).Select(x => x.First()).ToList();
metheonline 2016-10-10
  • 打赏
  • 举报
回复
metheonline 2016-10-08
  • 打赏
  • 举报
回复
引用 1 楼 diaodiaop 的回复:
既然你都定义出来4个分类. 那么直接

list.where(d=>d.分类=="分类1").orderby(d=>guid.newguid()).fristordefault();
就是分类1随机一个了..
引用 1 楼 diaodiaop 的回复:
既然你都定义出来4个分类. 那么直接

list.where(d=>d.分类=="分类1").orderby(d=>guid.newguid()).fristordefault();
就是分类1随机一个了..
你好!可能是我没有描述清楚,你这个只能取出一条数据的。 我是一次要取N个分类中的N条随机数据,每个分类只取1条数据 比如: 1.我传入分类集合 a,b,c,那就分类a,b,c 各取随机一条,共3条数据 2.我传入分类集合 a,c,那就分类a,,c 各取随机一条,共2条数据 …… 这个使用linq怎么查呢?谢谢!
by_封爱 2016-10-08
  • 打赏
  • 举报
回复
既然你都定义出来4个分类. 那么直接

list.where(d=>d.分类=="分类1").orderby(d=>guid.newguid()).fristordefault();
就是分类1随机一个了..

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧