我需要实现了移动记录和向下 (排序),并使用LINQ保存排序顺序到SQL的功能。 我使用SQL Server 2000,但如果它与SQL Server的更新版本的解决方案,我也许能够升级。 我很想听听你对如何做到这一点,你可能有什么想法。
Answer 1:
只是一个整数列添加Index
表和修改基于所述用户输入该指数-向上移动只是递减所选择的记录的索引值和递增前述记录的索引值。
public void MoveUp(Guid id)
{
Item item = Context.Items.Single(i => i.Id == id);
if (item.Index > 0)
{
Item predecessor = Context.Items.Single(i => i.Index == item.Index - 1);
item.Index -= 1;
predecessor.Index += 1;
Context.SaveChanges();
}
}
做相反的向下移动,和你做。 如果你需要这个多个表,只需创建使用接口的通用版本。
Answer 2:
感谢丹尼尔! 通过观察你的榜样,我想出了这个排序类别中的产品。
public void MoveUp(int categoryId, int productId, int originalIndex, int newIndex)
{
if (newIndex == originalIndex) return;
var product = _context.CategoryProducts.Single(x => x.CategoryId == categoryId && x.ProductId == productId);
product.SortOrder = newIndex;
_context.CategoryProducts
.Where(x =>
x.CategoryId == categoryId &&
x.ProductId != productId &&
x.SortOrder >= newIndex &&
x.SortOrder <= originalIndex)
.Update(x => { x.SortOrder = x.SortOrder + 1; });
_context.SubmitChanges();
}
public void MoveDown(int categoryId, int productId, int originalIndex, int newIndex)
{
if (newIndex == originalIndex) return;
var product = _context.CategoryProducts.Single(x => x.CategoryId == categoryId && x.ProductId == productId);
product.SortOrder = newIndex;
_context.CategoryProducts
.Where(x =>
x.CategoryId == categoryId &&
x.ProductId != productId &&
x.SortOrder >= originalIndex &&
x.SortOrder <= newIndex)
.Update(x => { x.SortOrder = x.SortOrder - 1; });
_context.SubmitChanges();
}
我用UpdatedExtension从迷上了LINQ的实际更新。
文章来源: Moving records up and down with Linq to SQL