以下代码的目的是找到可用的ID。
我在编写它时的想法是,每次query.Any()
运行时,查询将再次使用本地id
变量中新增加的值运行。据我所知,id
在执行查询之前不会对其进行评估。
从我的经验结果来看,我可以看到这不是它的工作方式,我想知道如何重新编写代码来实现其既定目标,同时保持使用LINQ的方式EF?
我知道如何以微不足道的方式重写 - 我的目标是更好地理解LINQ表达式的延迟执行及其执行上下文。
int id = 4700;
var query = from c in Advertisers
where c.ID == id
select c;
int loopCount = 0;
while(query.Any())
{
if(++loopCount == 5)
{
Console.WriteLine ("Cannot find a safe id.");
break;
}
Console.WriteLine ("Already a record with " + id);
id++;
}
Console.WriteLine ("The available id is " + id);
答案 0 :(得分:0)
从上面的代码问题是id更新但不是你的IQueryable对象。您需要在查询的where子句中更改id的值。我所知道的最简单的方法是封装初始查询,然后更改我需要的任何内容。
例如:
using (var context = new ModelContainer())
{
IQueryable<Advertiser> queryAdvertisers =
from c in context.Advertisers
select c;
for (int i = 0; i < 100; i++)
{
if (queryAdvertisers.Where(a => a.ID == i).Any())
{
Console.WriteLine("ID:{0} already exists.", i);
}
else
{
Console.WriteLine("ID:{0} does not exist.", i);
}
}
}
通常我会将queryAdvertisers重构为方法或类。