我正在使用Entity Framework。我有2个表:Unit
和Message
。它们看起来像那样:
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
,但我不希望在此之后进行连接和过滤。
是否可以根据其他表进行过滤?
答案 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
}
)