这可能是非常基本的,但我们现在就去,因为我现在无法解决这个问题。
我正在使用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
我需要获取DISTINCT
中TABLE_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和其他内容,但我甚至无法弄清楚如何构建此查询,所以我发布的所有内容都是骨架...
感谢任何帮助。
答案 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进行内连接,应用过滤器并获取不同的值。