【问题标题】:Select a random single record in controller在控制器中随机选择一条记录
【发布时间】:2011-12-15 00:03:13
【问题描述】:

在 C# 中使用 ASP.Net MVC3

我将如何从我的数据库中选择一条随机记录?

这是我现在的代码

CJAd cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true);

【问题讨论】:

  • 你喜欢你现在拥有的代码,因为?..
  • 不用&& c.ad_active == true&& c.ad_active就够了。

标签: c# asp.net asp.net-mvc linq asp.net-mvc-3


【解决方案1】:
var selection = db.CJAds.Where(c => c.category_id == 1 && c.ad_active);
CJAd cjad = selection
    .OrderBy(c => c.id)
    .Skip(new Random().Next(selection.Count()))
    .First();

【讨论】:

  • 这看起来不错,并且在 Visual Studio 中不会出错,但会引发此错误 System.NotSupportedException:方法 'Skip' 仅支持 LINQ to Entities 中的排序输入。方法“OrderBy”必须在方法“Skip”之前调用。
  • 您没有说明您使用的是哪个框架。但在这种情况下,在跳过之前添加一些排序 (OrderBy())。因为我不知道你的桌子,所以我可以在这里帮助你。
【解决方案2】:

我在移动设备上,所以无法查看。这应该可以。

CJAd cjad = db.CJADs.Where(c => c.category_id == 1 && c.ad_active).OrderBy(c => Guid.NewGuid()).FirstOrDefault();

【讨论】:

  • 我认为这不能在数据库上进行评估,会导致全表加载和内存排序。
猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2016-05-06
  • 2014-03-31
  • 2018-11-30
  • 2023-03-25
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多