Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架查询刚计算的值_C#_Entity Framework_Linq To Entities - Fatal编程技术网

C# 使用实体框架查询刚计算的值

C# 使用实体框架查询刚计算的值,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,构造仅由行计数和存在性检查组成的查询的最佳方法是什么?以下是我目前的工作: var文件摘要=( 从uu以db.苹果为单位 选择新的{ GreenAppleCount=db.Apples.Count(a=>a.Color==“绿色”), 恶心=db.香蕉.任何(b=>b.年龄>10岁) }).First(); 这个构造满足了我对数据库进行单个调用的主要目标,但似乎应该有一种更简洁的方式来表达它。请注意,在from子句中,db.Apples中的\未使用。它可能是db.Wildebeets中的,并且

构造仅由行计数和存在性检查组成的查询的最佳方法是什么?以下是我目前的工作:

var文件摘要=(
从uu以db.苹果为单位
选择新的{
GreenAppleCount=db.Apples.Count(a=>a.Color==“绿色”),
恶心=db.香蕉.任何(b=>b.年龄>10岁)
}).First();

这个构造满足了我对数据库进行单个调用的主要目标,但似乎应该有一种更简洁的方式来表达它。请注意,在
from
子句中,db.Apples中的
\未使用。它可能是db.Wildebeets中的
,并且会产生相同的查询。有没有办法避免未使用的表引用?

编写查询的最佳方法是

     var output = Enumerable.Range(0, 1).Select(o => 
              new {
                 GreenAppleCount = db.Apples.Count(a => a.Color == "Green"),
                 Yuck = db.Bananas.Any(b => b.Age > 10
                  });

编写查询的最佳方式是

     var output = Enumerable.Range(0, 1).Select(o => 
              new {
                 GreenAppleCount = db.Apples.Count(a => a.Color == "Green"),
                 Yuck = db.Bananas.Any(b => b.Age > 10
                  });

想到的最“明智”的选择是创建一个存储过程,该过程计算从EF调用的两个值。当您希望在一个DB往返过程中“执行多项任务”时,这可以是一个选项。

想到的最“明智”的选项是创建一个存储过程,该存储过程计算从EF调用的两个值。当您希望在一个DB往返过程中“做多件事”时,这可能是一个选项。

与OP的代码不同,这无法实现仅执行一个DB查询的主要目标。我的答案是以优化的方式编写代码。查询的迭代取决于表Apples中的行数,如果Apples包含1000行,代码将执行1000次。除非苹果和香蕉有关系,否则无法对DB进行单次点击。1)这不是我的问题2)这根本不是优化的,事实上,它比问题中的代码要糟糕得多,因为它执行两次单独的DB往返,而不是一次。@slash以澄清误解,不管苹果和香蕉之间的关系如何,问题中的查询只进行一次数据库调用。即使这些表完全不相关,LINQ查询也会转换为一个SELECT语句,并在一次调用中传递到数据库。与OP的代码不同,这无法实现仅执行一个DB查询的主要目标。我的答案是以优化的方式编写代码。查询的迭代取决于表Apples中的行数,如果Apples包含1000行,代码将执行1000次。除非苹果和香蕉有关系,否则无法对DB进行单次点击。1)这不是我的问题2)这根本不是优化的,事实上,它比问题中的代码要糟糕得多,因为它执行两次单独的DB往返,而不是一次。@slash以澄清误解,不管苹果和香蕉之间的关系如何,问题中的查询只进行一次数据库调用。即使这些表完全不相关,LINQ查询也会转换为一个SELECT语句,并在一次调用中传递到数据库,这是可行的。不幸的是,它与LINQ的许多特性不兼容,例如编译时类型检查、重构和IDE导航。另外,您还需要编写和部署存储过程,如果您首先使用EF代码,这将是一件麻烦的事情。不幸的是,它与LINQ的许多特性不兼容,例如编译时类型检查、重构和IDE导航。此外,还需要编写和部署存储过程,如果先使用EF代码,这将是一个麻烦。