首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq Union和Take

Linq Union和Take
EN

Stack Overflow用户
提问于 2017-01-13 01:38:58
回答 2查看 220关注 0票数 1

我正在尝试从一个具有不同类别的DB表中获取记录。我想从每个级别获取一个随机记录。

我尝试使用以下方法来实现这一点:

代码语言:javascript
复制
  var results = (from o in db.tblName
                 where o.category== 1
                 orderby Guid.NewGuid()
                 select o).Take(1).Union
                 (from o in db.tblName
                  where o.category == 2
                  orderby Guid.NewGuid()
                  select o).Take(1).Union
                 (from o in db.tblName
                  where o.category == 3
                  orderby Guid.NewGuid()
                  select o).Take(1).Union
                 (from o in db.tblName
                   where o.category == 4
                   orderby Guid.NewGuid()
                   select o).Take(1);

使用上面的代码会导致读取1条记录,而不是4条。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-13 01:42:52

这是因为每个Take都应用于链中所有在前Union的结果,即

代码语言:javascript
复制
a.Take(1).Union(b).Take(1)

您需要将括号添加到Take%s中,以确保

代码语言:javascript
复制
a.Take(1).Union(b.Take(1))

您的查询应如下所示:

代码语言:javascript
复制
var results =
       ((from o in db.tblName where o.category== 1 orderby Guid.NewGuid() select o).Take(1))
.Union((from o in db.tblName where o.category == 2 orderby Guid.NewGuid() select o).Take(1))
.Union((from o in db.tblName where o.category == 3 orderby Guid.NewGuid() select o).Take(1))
.Union((from o in db.tblName where o.category == 4 orderby Guid.NewGuid() select o).Take(1));

您可以进一步简化查询,如下所示:

代码语言:javascript
复制
var categories = new[] {1, 2, 3, 4};
var result = categories.Select(
    c => (from o in db.tblName where o.category==c orderby Guid.NewGuid() select o).Take(1)
).Distinct();
票数 0
EN

Stack Overflow用户

发布于 2017-01-13 01:45:57

如果我没理解错你的要求,你就不能做这样的事吗?

代码语言:javascript
复制
 Random rnd = new Random();


    var results  = db.tblName.GroupBy( q => q.category )
                 .Select( g => g.ElementAt(rnd.Next(0, g.Count())) ).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41619619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档