C# 从具有约束的数据库中随机选择的数据
我创建了一个MySQL数据库,其中包含大量的产品及其成本。我使用EF6包装数据库 根据给定的输入,我需要随机生成符合所述标准的正确选择 例如: 10件,总价值25美元 我不知道如何正确地遍历数据库以生成所需的结果 我目前所做的工作似乎效率低下:C# 从具有约束的数据库中随机选择的数据,c#,mysql,entity-framework,C#,Mysql,Entity Framework,我创建了一个MySQL数据库,其中包含大量的产品及其成本。我使用EF6包装数据库 根据给定的输入,我需要随机生成符合所述标准的正确选择 例如: 10件,总价值25美元 我不知道如何正确地遍历数据库以生成所需的结果 我目前所做的工作似乎效率低下: using (var db = new Database()) { var packageSelected = false; var random = new Ran
using (var db = new Database())
{
var packageSelected = false;
var random = new Random();
var minItemId = (from d in db.products select d.id).Min();
var maxItemId = (from d in db.products select d.id).Max();
var timer = new Stopwatch();
timer.Start();
Console.WriteLine("Trying to make package...");
while (!packageSelected)
{
var currentItems = new List<int>();
for (var i = 0; i <= 9; i++)
{
var randomItem = random.Next(minItemId, maxItemId);
currentItems.Add(randomItem);
}
decimal? packageValue = 0;
currentItems.ForEach(o =>
{
var firstOrDefault = db.products.FirstOrDefault(s => s.id == o);
if (firstOrDefault != null)
{
var value = firstOrDefault.MSRP;
packageValue += value;
}
});
if (!(packageValue >= 25) || !(packageValue <= 26)) continue;
packageSelected = true;
timer.Stop();
Console.WriteLine("Took {0} seconds.", timer.Elapsed.TotalSeconds);
currentItems.ForEach(o =>
{
var firstOrDefault = db.products.FirstOrDefault(s => s.id == o);
if (firstOrDefault != null)
Console.WriteLine("Item: {0} - Price: ${1}", firstOrDefault.DESCRIPTION,
firstOrDefault.MSRP);
});
}
}
像这样的东西怎么样:
public virtual TEntity GetRandom()
{
return DBSet.OrderBy(r => Guid.NewGuid()).Take(1).First();
}
public List<TEntity> Random(int amount, int maxprice)
{
var list = new List<TEntity>();
var tempPrice = 0;
for (int i = 0 ; i < amount; i++)
{
var element = GetRandom();
tempPrice += element.Price;
if (tempPrice > maxprice)
{
return list;
}
list.Add(element);
}
return list;
}
希望这有帮助
编辑:如果在所需的元素数量之前达到maxprice,则for循环将停止,您将无法获得全部元素。如果您的任何项目的成本超过1.01,则您有一个无限循环。i、 e.24.99+1.02==26.01