如何使用EF一起选择使用DISTINCT和FOREIGN KEY

时间:2014-03-27 00:42:28

标签: c# asp.net sql linq entity-framework

这可能是非常基本的,但我们现在就去,因为我现在无法解决这个问题。

我正在使用Entity Frameword for Oracle(托管驱动程序),并希望获得以下所有内容:

我有2个数据库表,如下所示:

    TABLE_USER

    ID   INTEGER
    NAME STRING
    AGE  INTEGER

Content:

    0 JOHN 39
    1 MARY 40
    2 ALBERT 41
    3 ROBERT 42
    4 SARAH 43
    5 PETER 44



    TABLE_EVENTS

    ID         INTEGER
    EVENT_NAME STRING
    USER_ID    INTEGER (FOREIGN KEY TO TABLE_USER.ID)

Content:

    0 CREATE 1
    1 CREATE 2 
    2 CREATE 5
    3 DELETE 3
    4 DELETE 0
    5 CREATE 1
    6 DELETE 3
    7 CREATE 0
    8 UPDATE 4
    9 UPDATE 5
    10 DELETE 1

我需要获取DISTINCTTABLE_EVENTS的所有TABLE_USER值,AGE <= 40中的用户年龄属于特定条件(如 IQueryable<TABLE_USER> tableUser = dbContext.TABLE_USER; IQueryable<TABLE_EVENTS> tableEvents = dbContext.TABLE_EVENTS; /// /// Build the query /// tableUserQuery = tableUser.Where(record => record => USER_ID == ??tableUser.ID?? && ??tableUser.AGE < 30?? ).GroupJoin(???); /// /// Execute que query /// var dbList = query.ToList(); )。

这个例子会给我以下列表: 创建 DELETE

我的代码如下:

{{1}}

我正在查看GroupJoin和其他内容,但我甚至无法弄清楚如何构建此查询,所以我发布的所有内容都是骨架...

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

通常如果2个表由外键链接,EF会生成导航属性以到达另一个实体,您可以使用此查询。

List<string> events = dbContext.TABLE_EVENTS.Where(te=>te.TABLE_USER.AGE < 30).Select(te=>te.EVENT_NAME).Distinct().ToList();

如果您没有看到链接的外国实体,则查询为

List<string> events = dbContext.TABLE_EVENTS.Join(dbContext.TABLE_USERS, te=>te.USER_ID, tu=>tu.ID, (te,tu)=> te).Where(te=>te.TABLE_USER.AGE < 30).Select(te=>te.EVENT_NAME).Distinct().ToList();

上述查询基本上对用户id进行内连接,应用过滤器并获取不同的值。