如何加速 C#/Linq 查询?[我不需要获取数据,我需要获取条件]

本文关键字:获取 数据 不需要 条件 加速 何加速 查询 Linq | 更新日期: 2023-09-27 18:28:18

    public int being = 0;
    public void Insert(Currency current, int number)
    {
        being = db.Currency.Where(x => x.ForDate == current.ForDate)
            .Where(x => x.TitleId == current.TitleId)
            .Where(x => x.Value == current.Value).Count(x=>x.Id > 0);
        if (being == 0)
        {
            db.Currency.AddOrUpdate(current);
        }
   }

这是我的代码工作得很慢,因为获取日期,但这不是必需的,我不知道其他方法。也许像这样:

db.Currency.Find().Value.Equals(current.Value).where...where...

如何加速 C#/Linq 查询?[我不需要获取数据,我需要获取条件]

我认为您的主要问题是.Count(x => x.Id > 0),它强制评估之前的所有条件并实际获得总数。

如果可以,请将其替换为 Any 。这样,它最多只需要获得一行:

bool isBeing = db.Currency
               .Where(x => x.ForDate == current.ForDate
                           && x.TitleId == current.TitleId
                           && x.Value == current.Value
                           && x.Id > 0
                     )
               .Any();

您可以在一个where中完成所有条件,也可以跳过使用bool变量来检查条件

if(db.Currency.Where(x => x.ForDate == current.ForDate 
          && x.TitleId == current.TitleId && x.Value == current.Value && x.Id > 0).Any())
{
    db.Currency.AddOrUpdate(current);
}