【问题标题】:how to use EF to select using DISTINCT and FOREIGN KEY together如何使用 EF 选择同时使用 DISTINCT 和 FOREIGN KEY
【发布时间】:2014-03-27 00:42:28
【问题描述】:

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

我正在使用 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

我需要从TABLE_EVENTS 中获取所有DISTINCT 值,其中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();

我在看 GroupJoin 和其他东西,但我什至不知道如何构建这个查询,所以我发布的只是一个骨架......

感谢任何形式的帮助。

【问题讨论】:

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


    【解决方案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 进行内部联接,应用过滤器并获取不同的值。

    【讨论】:

    • 出现了链接的外部实体,但我收到以下编译器错误:无法将类型 'System.Linq.IQueryable' 隐式转换为 'System.Linq.IQueryable '。存在显式转换(您是否缺少强制转换?)...它显示两个语句都存在错误...。
    • 那是因为您不再需要 IQueryable .. 结果是 IQueryable 或 List 取决于您是否执行 ToList() .. 更新相应的答案。希望有帮助。
    • 工作正常。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 2021-01-18
    • 2019-12-18
    • 2010-12-04
    • 1970-01-01
    相关资源
    最近更新 更多