如何在 linq 中获取随机行,最后插入的行位于顶部

2023-12-09

我试图针对每个请求显示随机产品,this OrderBy(r => Guid.NewGuid())工作正常,但我试图在表记录很大时提高性能,所以我使用了第二个选项here

我的行动:

public ActionResult ProductType(string id)
{
List<ProductsView> productlist = (from a in this.dbo.ProductTable
                                 join ca in dbo.Category on a.CategoryID equals ca.CategoryID
                                 where ca.Category == id 
                                 select new ProductsView()
                                 {
                                 CategoryID = c.CategoryID,
                                 Categorycount = c.Categorycount
                                 }).ToList<ProductsView>();

// here shuffle or mix products

int count = productlist.Count();
int index = new Random().Next(count);
ViewBag.Products = productlist.Skip(index).ToList();

 return View();

}

但是当视图返回时,一些记录丢失,例如:

第一个请求数4 索引1

显示 3 个产品

第二个请求数4 索引2

显示 2 个产品

第三个请求数4 索引3

显示 1 个产品

最后我还有一个要求我可以在顶部显示最后插入的行并让其他产品是随机的吗?

我可以知道我错过了什么吗?

任何帮助都会很棒。


好的,更新后的要求是:

  • 获取所有项目
  • 除了第一个项目之外,排序是随机的,第一个项目应该是最后添加的项目

首先,摆脱你的Skip称呼。你并不是想跳过任何事情。只需将所有产品(可能已订购 - 见下文)提取到列表中即可。

对于随机性部分,我会在调用代码中使用修改后的 Fischer-Yates shuffle 来执行此操作 - Stack Overflow 上有很多这样的示例,例如here.

在这种情况下,您可能希望将最新的项目放在列表的开头,然后将其打乱rest列表中的。只需对洗牌代码进行轻微修改即可轻松实现这一点 - 但您需要首先将最新的项目添加到列表的开头。你可以通过使用来做到这一点OrderByDescending(x => x.InsertionDate)(或其他)在 LINQ 查询中,或者只是获取所有内容并在 O(n) 遍历内存中的行中找到最新行。使用OrderByDescending会更简单,但效率可能会稍低(因为您实际上并不需要完整排序)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 linq 中获取随机行,最后插入的行位于顶部 的相关文章

  • 使用 LINQ 对多个列进行分组和聚合

    我在尝试使用 LINQ 和 C 对 csv 文件执行分组和计算行时遇到了麻烦 示例 csv T5 929 O PPT DAY 4 18 09 ACXD DSC T5 929 O PPT DAY 4 18 09 ACXD DSC T5 644
  • 缺少 EF ObjectContext.SaveChanges

    我正在一个新项目中使用实体框架 我从一年前就开始使用 EF 今天 我尝试使用 Visual Studio 2008 SP1 和 2010 生成实体数据模型 它正在生成对象上下文属性和实体集 但尚未生成 SaveChanges 方法 我什至尝
  • SQL:如何从一个表中获取另一个表中每一行的随机行数

    我有两个数据不相关的表 对于表 A 中的每一行 我想要例如表 B 中的 3 个随机行 使用光标这相当容易 但速度非常慢 那么我该如何用单个语句来表达这一点以避免 RBAR 呢 要获得 0 到 N 1 之间的随机数 可以使用 abs chec
  • Linq to 实体使用 `Func` 在生成匿名对象的 select 语句中创建属性

    我正在使用 linq to 实体开发一种简单的文本搜索方法 我想在几个地方重用该方法 看起来有点像这样 IQueryable
  • 将 Expression> 转换为 Expression>

    确实很简单的问题 我有显示 Nullable Bool 的 MVC 视图 例如 Html CheckBoxFor model gt model NullableBoolHere Model NullableBoolHere 我想创建一个新的
  • 多级父子排序

    我有一个物品清单 ID 名称 ParentID 1 abc 0 级别1 2 定义 1 3吉1 4 jkl 0 5米诺2 6 季度 5 7 AAA 1 8 威克斯 0 我希望列表排序为 美国广播公司 啊啊 定义 姆诺 吉 jkl 维克斯 也就
  • 实体框架代码优先 - 外键约束问题

    我是 EF 代码优先主体的新手 目前不知道该怎么做 我有 2 个 POCO 类 public class Problem public int ProblemID get set public int UserID get set publ
  • Python 3 os.urandom

    在哪里可以找到完整的教程或文档os urandom 我需要获得一个随机 int 来从 80 个字符的字符串中选择一个字符 如果你只需要一个随机整数 你可以使用random randint a b 来自随机模块 http docs pytho
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • 使用 Group By LINQ 语句时 VB.NET 返回 IEnumerable(Of IEnumerable(Of T))

    我正在尝试转换安西姆 凯拉德INotifyDataErrorInfo执行 http burnaftercoding com post asynchronous validation with wpf 4 5 进入VB NET 一切顺利 直到
  • 如何解决“指定的包含路径无效”?

    我有一个相当基本的亲子关系设置 最终结果是我希望能够通过 ASP NET MVC WebAPI 以 JSON 形式返回结果表 我正在使用实体框架 5 0 beta 2 我可以用一个简单的例子来演示我遇到的错误 鉴于课程Category an
  • 有没有办法将 C# 通用字典拆分为多个字典?

    我有一本 C 字典Dictionary
  • Linq Where 本地计数器关闭在 VS watch 中的结果不同

    我尝试删除前 3 个元素array与 LinQWhere扩展功能 这是一个例子 var array new 1 2 3 4 5 6 7 8 9 var count 3 var deletedTest1 0 var test1 array W
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • SimpleMemership CreateUserAndAccount 自定义

    我正在尝试添加一个新属性UserProfile我的模型中的类 public class UserProfile Key DatabaseGeneratedAttribute DatabaseGeneratedOption Identity
  • 使用 join 更新 Linq

    我有这两个合集 var materials new List
  • .edmx 文件的用途是什么?

    edmx 文件的用途是什么 阅读 CSDL SSDL 和 MSL 规范 在我看来 edmx 文件仅在设计时使用 我们打算将它与其他 edmx 一起分发吗 看来我们需要分发 ssdl 和 或 csdl 文件 EDMX 是 Visual Stu
  • pandas 中数据帧中的随机/洗牌行

    我目前正在尝试找到一种方法来按行随机化数据框中的项目 我在 pandas 中按列洗牌 排列找到了这个线程 在 pandas 中对 DataFrame 进行改组 排列 https stackoverflow com questions 157

随机推荐