如何过滤相关实体但没有外键

时间:2013-01-29 09:22:10

标签: c# linq entity-framework entity-framework-4

我正在使用带有lambda表达式的EF来查询表。

var eventToPushCollage = eventsForEvaluation.Where(x => x.DateTimeStart > currentDateTime && currentDateTime >= x.DateTimeStart.AddMinutes(-15));

eventsForEvaluation具有属性ID。

在我的数据库中,我还有另一个名为PushedEvents的表,其中包含Id属性。

注意:两个表没有外键关系

我需要对我的查询应用另一个过滤,并获取第二个表PushedEvents中也不存在的所有记录。

我想知道是否有可能和示例代码。

2 个答案:

答案 0 :(得分:2)

使用群组加入:

var eventToPushCollage = 
      from e in eventsForEvaluation
      join p in PushedEvents on e.Id equals p.Id into g
      where e.DateTimeStart > currentDateTime &&
            currentDateTime >= e.DateTimeStart.AddMinutes(-15) &&
            g.Count() == 0 // NOT present in second table
      select e;

UPDATE(方法语法)

var eventToPushCollage = eventsForEvaluation
       .GroupJoin(PushedEvents,
                  e => e.Id,
                  p => p.Id,
                  (e,g) => new { e, g })
       .Where(x => x.e.DateTimeStart > currentDateTime &&
                   currentDateTime >= x.e.DateTimeStart.AddMinutes(-15) &&
                   x.g.Count() == 0)
       .Select(x => x.e);

答案 1 :(得分:1)

试试这个

var eventToPushCollage =
    from x in eventsForEvaluation 

    where 
    !PushedEvents.Any(item => item.Id == x.Id)
    && x.DateTimeStart > currentDateTime 
    && currentDateTime >= x.DateTimeStart.AddMinutes(-15)

    select x;