是否比.Any()更快地检查那个条件?

时间:2015-11-27 15:36:37

标签: c# asp.net entity-framework

我一直在寻找一种方法,使用更快的EF查询来执行以下操作:

 public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
          // I want to send text to form1 when this button is clicked
    }
}

它工作正常,但我添加的越多,感觉就越慢。 它看起来好像经历了所有行2次(我不知道是不是这样)

我一直在搜索,看到有人使用 using (DAL.MandatsDatas db = new DAL.MandatsDatas()) { if(db.ARTICLE.Any( t => t.condition == condition)) oneArticle = db.ARTICLE.First( t => t.condition == condition); } 和其他无关的东西......

  1. 是否有更快的方法来检查某些是否存在然后接受它。

  2. 此外,我想知道count() > 0是否有助于我的案例,它是如何运作的?

2 个答案:

答案 0 :(得分:7)

是的,FirstOrDefault在这里更好:

oneArticle = db.ARTICLE.FirstOrDefault(t => t.condition == condition);

基本上Any会做一次选择,然后First会再做一次。虽然FirstOrDefault会执行相同的First,但如果没有输出则只返回null,因此无需再运行其他选择操作。

答案 1 :(得分:2)

是的,FirstOrDefault会更快,因为它只会查询一次。它的工作方式是,如果没有可用的行,它将返回null,如果有可用的行,它将根据您应用的任何顺序返回第一行(如果有的话)。