根据其他表值

时间:2017-03-02 09:29:40

标签: c# entity-framework linq join

我正在使用Entity Framework。我有2个表:UnitMessage。它们看起来像那样:

public class Unit
{
    int id;
    DateTime date;
}

public class Message
{
    int id;
    int unitId;
    DateTime date;
}

我希望每Unit加入Message个。{/ p>

我这样做:

DateTime from = DateTime.Now;

 db.Unit.Join(
    db.Message.Where(m => m.date >= from),
    u => u.id,
    s => s.unitId,
    (u, s) => new 
    {
        MessageTime = s.date,
        UnitTime = u.date
    }
)
.AsEnumerable()
.Select(r => new 
    {
        MessageTime = MessageTime,
        UnitTime = UnitTime
    }
)
.ToList()

Unit类包含date,我想在进行连接时使用它。我只想接收来自Message> = date的{​​{1}}邮件。我知道我可以unit.date,但我不希望在此之后进行连接和过滤。

是否可以根据其他表进行过滤?

1 个答案:

答案 0 :(得分:2)

LINQ仅支持equijoins。如果您需要不同类型的加入,可以将Join替换为SelectMany + Where - EF非常智能,可将其转换为SQL INNER JOIN

db.Unit.SelectMany(
    u => db.Message.Where(m => u.id == m.unitId && m.date >= u.date && m.date >= from),
    (u, m) => new
    {
        MessageTime = m.date,
        UnitTime = u.date
    }
)