如何构建一个查询随机行的查询?
如果我在SQL中编写它,那么我会在newid()上输入一个命令并从顶部删除n行.无论如何要先在EF代码中执行此操作?
我尝试创建一个使用newid()并使用DbSet.SqlQuery()执行它的查询.虽然它有效,但它不是最干净的解决方案.
此外,尝试检索所有行并通过新guid对它们进行排序.尽管行数相当小,但它仍然不是一个好的解决方案.
有任何想法吗?
如何更改以下代码,每次从数据库中获取50个不同的随机数据?
return (from examQ in idb.Exam_Question_Int_Tbl
where examQ.Exam_Tbl_ID==exam_id
select examQ).OrderBy(x=>x.Exam_Tbl_ID).Take(50);
Run Code Online (Sandbox Code Playgroud) 如何以随机顺序返回匹配的实体?
要明确这是Entity Framework的东西和LINQ to Entities.
(航空代码)
IEnumerable<MyEntity> results = from en in context.MyEntity
where en.type == myTypeVar
orderby ?????
select en;
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:
我尝试将其添加到上下文中:
public Guid Random()
{
return new Guid();
}
Run Code Online (Sandbox Code Playgroud)
并使用此查询:
IEnumerable<MyEntity> results = from en in context.MyEntity
where en.type == myTypeVar
orderby context.Random()
select en;
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
System.NotSupportedException: LINQ to Entities does not recognize the method 'System.Guid Random()' method, and this method cannot be translated into a store expression..
Run Code Online (Sandbox Code Playgroud)
编辑(当前代码):
IEnumerable<MyEntity> results = (from en in context.MyEntity
where …Run Code Online (Sandbox Code Playgroud) 我有一个包含20多条记录的静态表,我想以随机的方式从该表中选择N(N <20).使用LINQ在代码中执行此操作的最佳方法是什么?
在Python中,我可以这样做:
>>> import random
>>> ints = [1,2,3]
>>> random.choice(ints)
3
Run Code Online (Sandbox Code Playgroud)
在C#中,我做的第一件事是:
var randgen = new Random();
var ints = new int[] { 1, 2, 3 };
ints[randgen.Next(ints.Length)];
Run Code Online (Sandbox Code Playgroud)
但这需要索引,也需要复制ints困扰我.所以,我想出了这个:
var randgen = new Random();
var ints = new int[] { 1, 2, 3 };
ints.OrderBy(x=> randgen.Next()).First();
Run Code Online (Sandbox Code Playgroud)
仍然不是很好,很有效率.是否有更优雅的方式从IEnumberable获取随机值?
假设我有一个名为的列表,elements每个列表都满足或不满足某些布尔属性p.我想选择一个满足p随机均匀分布的元素.我提前知道有多少物品满足这个属性p.
以下代码会这样做吗?:
pickRandElement(elements, p)
randElement = null
count = 0
foreach element in elements
if (p(element))
count = count + 1
if (randInt(count) == 0)
randElement = element
return randElement
Run Code Online (Sandbox Code Playgroud)
(randInt(n)返回一个随机INT k与0 <= k < n.)
I have done a little bit of research on this and looked through a few articles both here on StackOverflow as well as some blog posts, but haven't found an exact answer. I also read that it is possible to do it using the 4.0 framework, but have yet to find any supporting evidence.
So my question, is it possible to perform SOUNDEX via a LINQ to SQL Query?
简介:我想找到一种使用Entity Framework和MySQL进行随机排序的方法(这很重要).该解决方案不应使用原始SQL查询或在从数据库加载所有值后进行排序.
我尝试过的:
我想从使用NewGuid()获得该答案的随机顺序.
码:
var query = from e in context.Table
orderby Guid.NewGuid()
select e;
var test = query.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
总是抛出异常:
An error occurred while executing the command definition. See the inner exception for details.
Inner exception:
FUNCTION MyDatabase.NewGuid does not exist System.Exception {MySql.Data.MySqlClient.MySqlException}
Run Code Online (Sandbox Code Playgroud)
似乎问题是MySQL没有NewGuid()函数.
我怎样才能通过MySQL函数RAND()来代替NewGuid().换句话说,如何RAND在Entity Framework中使用自定义功能?
我知道使用
ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)
运行常规sql命令时的功能.我想做同样的事情,但通过linq2sql.
我宁愿不选择整个范围内,通过rnd.Next(添加一个随机数),然后进行排序,最后...
我想从一个非常大的表(数百万行)上的复杂查询的结果中选择一些随机行。
我正在使用 SQL Server 2008,有效地执行此操作的正确方法似乎是TABLESAMPLE子句。
注 1:我对流行的“order by NEWID()”解决方案不感兴趣 - 它对于大型表来说效率低下。
注 2:由于我的查询很复杂,如果可能的话,我不想首先计算它的 COUNT。
注3:由于结果集很大,我不想自己遍历它,就像这里建议的那样。
最重要的是我正在使用 LINQ。具体来说,就是 LINQ-To-Entities。
是否有一种 LINQ 友好的方式来使用 TABLESAMPLE?
即使没有直接支持,是否有某种方法可以在 LINQ 中编写大部分查询,然后执行少量手动 SQL 来执行 TABLESAMPLE?
c# ×6
linq-to-sql ×3
random ×3
linq ×2
algorithm ×1
arrays ×1
mysql ×1
probability ×1
soundex ×1
sql ×1
sql-server ×1
statistics ×1