我一直在努力增加我的EF理解,从查询表到创建与我的业务对象匹配的实体,这样我就可以对我的业务对象而不是数据对象进行编码。我阅读的文章表明这是可能的,但他们所有的例子都相当简单,只涉及两个表格。我的情况有点复杂,我不知道该怎么办。
我有两张桌子(简化如下)
CREATE TABLE [dbo].[BarEvents]
(
[BarGUID] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID(),
[Bar] INT NULL
)
CREATE TABLE [dbo].[BarLog]
(
[BarGUID] UNIQUEIDENTIFIER NOT NULL,
[BarLogGUID] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID(),
[BarEventTime] DATETIME NOT NULL DEFAULT GETUTCDATE()
)
因此,如果我加入这些表,对于特定的BarGUID,那么如果我记录了1个Bar和4 bar事件,我会有4行,但我想要的只是最新的BarEventTime。所以我想加入并且只有一行:
我可以在EF中轻松地做到这一点:
var query = barEntities.BarEvents.Where( q=> q.BarGUID = '0000-0000-0000-0000')
.Select(barEvent =>
new LogItem()
{
Bar = barEvent.Bar,
BarEventTime = barEvent.BarLog.Max(u => u.BarEventTime)
});
但是从我读过的内容来看,我应该能够定义一个LogItem实体,并将此逻辑以某种方式放在我的LogItem实体中,然后针对该实体编写查询。我的问题是,当我试图在实体定义中加入我的表时,我只看到琐碎的连接条件。有没有办法做到这一点?还是指南?
任何帮助都将不胜感激。
谢谢。
答案 0 :(得分:0)
为什么不执行以下操作:
SQL View
,用于执行您想要的任务EF Context