0

我可能在这里含糊不清,但我正在寻找一个在 linq 中放置基于集合的辅助操作的好地方,这样我就可以做类似的事情;

db.Selections.ClearTemporary()

它做了类似的事情

db.DeleteAllOnSubmit(db.Selections.Where(s => s.Temporary))

因为我可以弄清楚如何扩展Table<Selection>我能做的最好的事情是在选择的部分类中创建一个静态方法(类似于 Ruby),但我必须像这样传递数据上下文;

Selection.ClearTemporary(MyDataContext)

这很糟糕,因为我有两个约定来进行基于集合的操作,并且我必须将数据上下文传递给静态类。

我见过其他人推荐将辅助方法打入部分数据上下文中,例如;

myDataContext.ClearTemporarySelections();

但我觉得这使 dc 成为内聚行动的垃圾场。

我肯定错过了一些东西。但愿如此。什么是约定?

4

2 回答 2

2
public static class LinqExtensions
{
  public static void Clear<T>(this Table<T> t, Expression<Func<T,bool>> pred)
  {
    t.DeleteAllOnSubmit(t.Where(pred));
  }
}

用法:

db.Selections.Clear(x => x.Temporary);

如果需要,DataContext可以从Table<T>.

于 2010-03-30T08:53:37.557 回答
0

我正在考虑创建嵌套类作为数据上下文的部分加上一个初始化并返回嵌套类的 getter

public SelectionsHelperClass SelectionsHelper {
  get {
    return new SelectionsHelperClass(Selections)
  }
}

这样我就可以在db.SelectionsHelper.ClearTemporary()不传递上下文的情况下做到这一点,同时将特定于选择的基于集合的操作(集合操作)逻辑地保持在一起。我没有测试过这个。

我忘了提到的是,我想要这些帮助程序的原因是它们经常被一些但不是所有的控制器共享在一个 asp mvc 应用程序中,我也在寻找一个地方来重构它们。

于 2010-03-30T22:48:57.637 回答