将 LINQ 的顺序设置为 SQL ObservableCollection
Setting the order of LINQ to SQL ObservableCollection
我在 DataGrid 的顶部有一个组合框,它绑定到从 LINQ 到 SQL 映射的可观察集合。那就是我使用 "drag and drop" 方法将 table 放入我的数据类中,然后填充一个 ObservableCollection。我想让组合框以最新的第一顺序显示项目(这将在名称字段上降序排列)但找不到要设置的任何 属性。似乎对可观察集合进行排序是错误的方法。我认为最简单的方法是使用存储过程而不是 table 作为 LINQ to SQL class 生成器。我是否缺少一些更简单的内置解决方案?
这里是 class 代码,用于将生成的 LINQ table 添加到我的可观察集合中:
class ObservableTransmittals : ViewableCollection<Transmittal>
{
public ObservableTransmittals(DataClasses1DataContext dataDc)
{
foreach (Transmittal trn in dataDc.Transmittals)
{
this.Add(trn);
}
}
}
现在从下面开始使用它:
class ObservableTransmittals : ViewableCollection<Transmittal>
{
public ObservableTransmittals(DataClasses1DataContext dataDc)
{
var linq = dataDc.Transmittals.OrderByDescending(x => x.TransName);
foreach (Transmittal trn in linq)
{
this.Add(trn);
}
}
}
在你的 LINQ to Sql
var linq = YourTable.OrderByDescending(x => x.Name).ToObservableCollection();
其中 ToObservableCollection 是自定义扩展方法。
例如
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> list)
{
return new ObservableCollection<T>(list);
}
编辑:
如果要自动添加到上下文或删除,则需要监听基础class的CollectionChanged事件。
class ObservableTransmittals : ObservableCollection<Transmittal>
{
private readonly YourContext _dataContext;
public ObservableTransmittals(YourContext dataContext)
{
var linq = dataContext.Transmittals.OrderByDescending(x => x.TransName);
foreach (Transmittal trn in linq)
{
this.Add(trn);
}
_dataContext = dataContext;
}
protected override void RemoveItem(int index)
{
_dataContext.Transmittals.Remove(this[index]);
base.RemoveItem(index);
}
protected override void InsertItem(int index, Transmittal item)
{
_dataContext.Transmittals.Add(item);
base.InsertItem(index, item);
}
protected override void SetItem(int index, Transmittal item)
{
// Add replace logic
base.SetItem(index, item);
}
}
我在 DataGrid 的顶部有一个组合框,它绑定到从 LINQ 到 SQL 映射的可观察集合。那就是我使用 "drag and drop" 方法将 table 放入我的数据类中,然后填充一个 ObservableCollection。我想让组合框以最新的第一顺序显示项目(这将在名称字段上降序排列)但找不到要设置的任何 属性。似乎对可观察集合进行排序是错误的方法。我认为最简单的方法是使用存储过程而不是 table 作为 LINQ to SQL class 生成器。我是否缺少一些更简单的内置解决方案?
这里是 class 代码,用于将生成的 LINQ table 添加到我的可观察集合中:
class ObservableTransmittals : ViewableCollection<Transmittal>
{
public ObservableTransmittals(DataClasses1DataContext dataDc)
{
foreach (Transmittal trn in dataDc.Transmittals)
{
this.Add(trn);
}
}
}
现在从下面开始使用它:
class ObservableTransmittals : ViewableCollection<Transmittal>
{
public ObservableTransmittals(DataClasses1DataContext dataDc)
{
var linq = dataDc.Transmittals.OrderByDescending(x => x.TransName);
foreach (Transmittal trn in linq)
{
this.Add(trn);
}
}
}
在你的 LINQ to Sql
var linq = YourTable.OrderByDescending(x => x.Name).ToObservableCollection();
其中 ToObservableCollection 是自定义扩展方法。
例如
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> list)
{
return new ObservableCollection<T>(list);
}
编辑:
如果要自动添加到上下文或删除,则需要监听基础class的CollectionChanged事件。
class ObservableTransmittals : ObservableCollection<Transmittal>
{
private readonly YourContext _dataContext;
public ObservableTransmittals(YourContext dataContext)
{
var linq = dataContext.Transmittals.OrderByDescending(x => x.TransName);
foreach (Transmittal trn in linq)
{
this.Add(trn);
}
_dataContext = dataContext;
}
protected override void RemoveItem(int index)
{
_dataContext.Transmittals.Remove(this[index]);
base.RemoveItem(index);
}
protected override void InsertItem(int index, Transmittal item)
{
_dataContext.Transmittals.Add(item);
base.InsertItem(index, item);
}
protected override void SetItem(int index, Transmittal item)
{
// Add replace logic
base.SetItem(index, item);
}
}