繁体   English   中英

实体框架6,Oracle-Linq Join查询生成不需要的where条件

[英]Entity Framework 6, Oracle - Linq Join Query generates unwanted where condition

我有以下安排,其中我加入了2个表以从第二个表中检索描述列。

我正在将Entity Framework 6与Oracle 12c一起使用

public IQueryable<TEntity> GetAll()
{
    return this.dbSet.AsQueryable();
}

var fooQuery = fooRepo.GetAll();
var barQuery = barRepo.GetAll();

var joinedQuery = 
    fooQuery.Join(
    barQuery,
    fooObj => new { fooObj.comp_key_1, fooObj.comp_key_2, fooObj.comp_key_3 },
    barObj => new { barObj.comp_key_1, barObj.comp_key_2, barObj.comp_key_3 },
    (fooItem, barItem) => new {
        fooItem.comp_key_1,
        fooItem.comp_key_2,
        fooItem.comp_key_3,
        ...
        ...
        ...
        barItem.BarName
    }
);

当执行代码时,它会生成以下SQL,它不太理想,因为会生成意外的where子句。

SELECT 
    1 AS "C1", 
    "Extent1"."COMP_KEY_1" AS "COMP_KEY_1", 
    "Extent1"."COMP_KEY_2" AS "COMP_KEY_2", 
    "Extent1"."COMP_KEY_3" AS "COMP_KEY_3", 
    ...
    ...
    ...
    "Extent2"."BAR_NAME" AS "BAR_NAME"
FROM  "FOO_TABLE" "Extent1"
INNER JOIN "BAR_TABLE" "Extent2" ON ("Extent1"."COMP_KEY_1" = "Extent2"."COMP_KEY_1") AND ("Extent1"."COMP_KEY_2" = "Extent2"."COMP_KEY_2") AND ("Extent1"."COMP_KEY_3" = "Extent2"."COMP_KEY_3")
WHERE ((("Extent2"."Discriminator" = N'Foo') OR ("Extent2"."Discriminator" = N'Bar')))

我想念的是什么,需要采取什么措施才能删除意外的where子句?

找到了,

有一个“ Bar”的基类,它仅包含p_key信息,而扩展类则包含所有其他属性。

一旦我将所有内容转移到一个班上

("Extent2"."Discriminator" = N'Foo') OR ("Extent2"."Discriminator" = N'Bar') 

消失了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM