我认为使用 linq 到对象的查询最终会变得非常可读和美观。例如:
from person in db.Persons.ToList()
where person.MessageableBy(currentUser) ...
其中 MessageableBy 是一种无法转换为存储表达式 (sql) 的方法
public bool MessageableBy(Person sender)
{
// Sender is system admin
if (sender.IsSystemAdmin())
return true;
// Sender is domain admin of this person's domain
if (sender.Domain.DomainId == this.Domain.DomainId && this.Domain.HasAdmin(sender))
return true;
foreach (Group group in this.Groups)
{
if (group.MessageableBy(sender))
return true;
}
// The person is attorney of someone messageable
if (this.IsAttorney)
{
foreach (Person pupil in this.Pupils)
if (pupil.MessageableBy(sender))
return true;
}
return false;
}
问题是我认为这不会扩大规模。我已经注意到数据库中有一些条目,所以无法想象大型数据库。
所以问题是: 我是否应该将 linq 与 linq 与对象混合(即:将一些“where”应用于 ICollection 并将一些“where”应用于 .ToList() 结果?我应该只使用 linq到实体,以一个非常大的句子结尾?