LINQ-to-SQL选择过滤器

时间:2009-02-10 08:52:33

标签: linq linq-to-sql

有没有办法确保在特定表的每个选择中将特定条件子句添加到表达式树中?

例如,具有删除记录日期的字段的表应该永远不会返回或包含在任何类型的语句中。

不是每次都包含一个where子句,是否有办法在不创建视图的情况下为每个选择添加条件?

---编辑清楚如下---

我正在寻找一个我可以偏爱的功能,很像插入/更新/删除功能,但是用于选择。我想对所有针对表的查询应用全面过滤器。

此外,如果我从父级获取项目集合,我也希望过滤该集合。

类似的东西:

Private Function BaseItems() As IQueryable(Of Item)
    Return (From mi In dataContext.Items Where mi.DeletedAt Is Nothing Select mi)
End Function
Public Function GetItems() as list(of Item)
    Return (From mi in BaseItems() select mi).ToList()
End Function

适用于我编写和调用的函数。例如,ITEMS可以是MASTER的孩子。

'assume TheMaster is a LinqToSQL data class which has a one to many child of Items
TheMaster.Items.Count '<-- will bring back all Items.

如何总是过滤数据类填充的内容?

3 个答案:

答案 0 :(得分:1)

您应该能够将项目放入列表然后使用lambda表达式来过滤列表吗?

MyListObject.Where(x => x == x.Date);

答案 1 :(得分:0)

我不确定我理解你问题的背景。但是,您可以在linq查询上添加更多条件。如果返回IQueryable,则只返回一个可运行的查询,并且可以链接其他LINQ查询。 Afaik它将不会执行,直到你开始使它到IEnumerable或List迭代。

关于LINQ-to-SQL的示例:

MyDataContext context = new MyDataContext();

public IQueryable<MyTable> GetTable() {
    return from record in context.Records
           where record.Date > DateTime.Now
           select record;
}

public IEnumerable<MyTable> GetTableWithinWeek() {
    return from record in GetTable()
           where record.Date < DateTime.Now.AddDays(7);
           select record;
}

我希望我的答案有道理。

答案 2 :(得分:0)

DataContext的DataLoadOptions中的AssociateWith似乎正在做我需要的事情。