Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 嵌套导航属性+生成的SQL查询_C#_Entity Framework_Linq - Fatal编程技术网

C# 嵌套导航属性+生成的SQL查询

C# 嵌套导航属性+生成的SQL查询,c#,entity-framework,linq,C#,Entity Framework,Linq,我想知道下面生成的查询是否可以改进 我有以下linq表达式: var gps = DBContext.GPS.Where(x => x.ID == id) .Select(c => new { Id = c.ID, Descripcion = c.DESCRIPCION_LARGA, Alarmas = c.ALARMAS.Select(a => new { FechaHor

我想知道下面生成的查询是否可以改进

我有以下linq表达式:

var gps = DBContext.GPS.Where(x => x.ID == id)
    .Select(c => new
    {
        Id = c.ID,
        Descripcion = c.DESCRIPCION_LARGA,
        Alarmas = c.ALARMAS.Select(a => new
        {
            FechaHora = a.FECHAHORA,
            CercaDescripcion = a.CERCA.DESCRIPCION_LARGA
        })
    });
ALARMAS是GPS实体的导航属性。这将生成以下sql查询:

SELECT "Project1"."ID" AS "ID", "Project1"."DESCRIPCION_LARGA" AS "DESCRIPCION_LARGA", "Project1"."C1" AS "C1", "Project1"."GPS_ID" AS "GPS_ID", "Project1"."FECHAHORA" AS "FECHAHORA", "Project1"."DESCRIPCION_LARGA1" AS "DESCRIPCION_LARGA1" FROM (SELECT "Extent1"."ID" AS "ID", "Extent1"."DESCRIPCION_LARGA" AS "DESCRIPCION_LARGA", "Join1"."GPS_ID" AS "GPS_ID", "Join1"."FECHAHORA" AS "FECHAHORA", "Join1"."DESCRIPCION_LARGA" AS "DESCRIPCION_LARGA1", CASE WHEN ("Join1"."GPS_ID" IS NULL) THEN NULL ELSE 1 END AS "C1" FROM "GPS" "Extent1" LEFT OUTER JOIN (SELECT "Extent2"."GPS_ID" AS "GPS_ID", "Extent2"."ALARMA_ID" AS "ALARMA_ID", "Extent2"."LOG_ID" AS "LOG_ID", "Extent2"."CERCA_ID" AS "CERCA_ID", "Extent2"."FECHAHORA" AS "FECHAHORA", "Extent3"."ID" AS "ID", "Extent3"."DESCRIPCION_LARGA" AS "DESCRIPCION_LARGA", "Extent3"."DESCRIPCION_MED" AS "DESCRIPCION_MED", "Extent3"."DESCRIPCION_CORTA" AS "DESCRIPCION_CORTA", "Extent3"."ABREVIACION" AS "ABREVIACION", "Extent3"."CAPA_ID" AS "CAPA_ID", "Extent3"."CATEGORIA_ID" AS "CATEGORIA_ID", "Extent3"."PADRE_ID" AS "PADRE_ID", "Extent3"."REGION_ID" AS "REGION_ID", "Extent3"."FORMA_ID" AS "FORMA_ID", "Extent3"."VERTICE1_LAT" AS "VERTICE1_LAT", "Extent3"."VERTICE1_LNG" AS "VERTICE1_LNG", "Extent3"."VERTICE2_LAT" AS "VERTICE2_LAT", "Extent3"."VERTICE2_LNG" AS "VERTICE2_LNG", "Extent3"."LAT" AS "LAT", "Extent3"."LNG" AS "LNG", "Extent3"."RADIO" AS "RADIO", "Extent3"."ESTADO_ID" AS "ESTADO_ID", "Extent3"."CERCA_ENRUTA_ID" AS "CERCA_ENRUTA_ID", "Extent3"."OBSERVACIONES" AS "OBSERVACIONES" FROM "GPS_ALARMAS" "Extent2" LEFT OUTER JOIN "CERCAS" "Extent3" ON "Extent2"."CERCA_ID" = "Extent3"."ID" ) "Join1" ON "Extent1"."ID" = "Join1"."GPS_ID" WHERE ("Extent1"."ID" = :p__linq__0) ) "Project1" ORDER BY "Project1"."ID" ASC, "Project1"."C1" ASC 我的问题是,当只需要ID和Description_LARGA时,为什么它要查询CERCA Extend3表上的所有列

这能改进吗?还是我不该担心

提前感谢并致以最良好的问候,
Fabian

生成的SQL似乎与Linq语句不匹配,因为SQL语句中的列比Linq语句中的列多。嗨,Frank,这就是问题所在。为什么会这样?请注意,我使用的是Oracle ODP.NET,可能是查询提供程序没有正确执行该操作。我的意思是,生成的SQL语句可能不是来自您显示的Linq语句。您是从SQL探查器中获取的吗?如果是这样,您的数据库服务器是否可能被另一个类似于Linq语句的查询击中?我可以向您保证SQL语句来自Linq语句。我在控制台上得到sql语句。它是一个.net核心项目,oracle+实体框架6。该应用程序的配置是为了从linq语句中输出所有sql生成的语句,以便进行调试。我想说,您不必为此担心。子查询选择通常并不重要——只有最终选择才重要,因为这是将在客户端获取的数据。