我认为枚举可能是要走的路,取决于动作(创建,删除)它取代了角色?然后我必须存储变量“ - ”,“++”,“> =”和“>” hrrmm。任何简单的建议都会很棒,我可以将它作为未来参考,以便我如何处理这样的问题!
public void ArrangeCategoriesOrderOnCreate(Category category)
{
var tx = _session.BeginTransaction();
var categories = _session.QueryOver<Category>()
.Where(c => c.Parent.Id == category.Parent.Id && c.OrderInList >= category.OrderInList) // the >= category.OrderInList here
.List<Category>();
foreach(var item in categories)
{
item.OrderInList++; // The ++ here.
_session.SaveOrUpdate(item);
}
tx.Commit();
}
public void ArrangeCategoriesOrderOnDelete(Category category)
{
var tx = _session.BeginTransaction();
var categories = _session.QueryOver<Category>()
.Where(c => c.Parent.Id == category.Parent.Id && c.OrderInList > category.OrderInList) // the > category.OrderInList here
.List<Category>();
foreach(var item in categories)
{
item.OrderInList--; // the -- here.
_session.SaveOrUpdate(item);
}
tx.Commit();
}
修改1
无法从Invoke,Invoke(值(CumbriaMD.Infrastructure.DataServices.CategoryDataServices +&lt;&gt; c_ DisplayClass8).orderComparer,c.OrderInList,value(CumbriaMD.Infrastructure.DataServices.CategoryDataServices +)中确定成员类型&lt;&gt; c _DisplayClass8).category.OrderInList),System.Linq.Expressions.InvocationExpression
跟踪:
[例外:无法从Invoke,Invoke(值(CumbriaMD.Infrastructure.DataServices.CategoryDataServices +&lt;&gt; c_ DisplayClass8)确定成员类型.orderComparer,c.OrderInList,value(CumbriaMD.Infrastructure.DataServices) .CategoryDataServices +&lt;&gt; c _DisplayClass8).category.OrderInList),System.Linq.Expressions.InvocationExpression] NHibernate.Impl.ExpressionProcessor.ProcessBooleanExpression(表达式表达式)+1113 NHibernate.Impl.ExpressionProcessor.ProcessExpression(表达式表达式)+114 NHibernate.Impl.ExpressionProcessor.ProcessAndExpression(BinaryExpression表达式)+85 NHibernate.Impl.ExpressionProcessor.ProcessBinaryExpression(BinaryExpression表达式)+124 NHibernate.Impl.ExpressionProcessor.ProcessExpression(表达式表达式)+95 NHibernate.Impl.ExpressionProcessor.ProcessLambdaExpression(LambdaExpression表达式)+52 NHibernate.Impl.ExpressionProcessor.ProcessExpression(Expression
1 expression) +39 NHibernate.Criterion.QueryOver
2.Add(Expression1 expression) +107 NHibernate.Criterion.QueryOver
2.Where(Expression1 expression) +42 NHibernate.Criterion.QueryOver
2.NHibernate.IQueryOver.Where(Expression`1 expression)+42 < / p>
答案 0 :(得分:2)
一种简单的启动方式是使用Func
来区分常见功能,并消除大部分重复。
public void ArrangeCategoriesOrderOnCreate(Category category)
{
ArrangeCategoriesOrderOnAction(category, (a,b) => a>=b, x => x + 1);
}
public void ArrangeCategoriesOrderOnDelete(Category category)
{
ArrangeCategoriesOrderOnAction(category, (a,b) => a>b, x => x - 1);
}
public void ArrangeCategoriesOrderOnAction(Category category,
Expression<Func<int, int, bool>> orderComparer,
Func<int, int> orderUpdateCalculator)
{
var tx = _session.BeginTransaction();
var categories = _session.QueryOver<Category>()
.Where(c => c.Parent.Id == category.Parent.Id
&& orderComparer(c.OrderInList, category.OrderInList))
.List<Category>();
foreach (var item in categories)
{
item.OrderInList = orderUpdateCalculator(item.OrderInList);
_session.SaveOrUpdate(item);
}
tx.Commit();
}