我正在尝试使用帖子中的答案:您如何对 EntitySet<T> 进行排序以公开接口,以便我可以使用绑定列表对 EntitySet 进行排序。我创建了下面的类,但出现以下编译器错误:“找不到类型或命名空间‘P’(您是否缺少 using 指令或程序集引用?)。有人可以告诉我 P 的含义以及哪个命名空间我需要包含以下方法来编译吗?我对代表和兰巴表达式很陌生。
另外,有人可以确认,如果我从我的 EntitySet 创建一个 BindingList,那么我对 BindingList 所做的任何修改都会对 EntitySet 进行吗?
基本上,我有一个 EntitySet 需要对其进行排序和更改。然后,我将需要使用 BindingList 来自的原始实体来保留这些更改。
public class EntitySetBindingWrapper<T> : BindingList<T>
{
public EntitySetBindingWrapper(BindingList<T> root)
: base(root)
{
}
public void Sort<P>(Expression<Func<T, P>> expr, ListSortDirection direction)
{
if (expr == null)
base.RemoveSortCore();
MemberExpression propExpr = expr as MemberExpression;
if (propExpr == null) throw new ArgumentException("You must provide a property", "expr");
PropertyDescriptorCollection descriptorCol = TypeDescriptor.GetProperties(typeof(T));
IEnumerable<PropertyDescriptor> descriptors = descriptorCol.Cast<PropertyDescriptor>();
PropertyDescriptor descriptor = descriptors.First(pd => pd.Name == propExpr.Member.Name);
base.ApplySortCore(descriptor, direction);
}
}
我终于得到了上面的代码来编译但是,现在当我尝试调用构造函数时出现错误:
currentPredefinedJob.fkItems 是 EntitySet 的以下代码导致错误:无法从 System.ComponentModel.IBindingList 转换为 System.ComponentModel.BindingList
var bindingWrapper = new EntitySetBindingWrapper<PredefinedJobsItem>(currentPredefinedJob.fkItems.GetNewBindingList());
而且,以下代码会导致错误:错误 8 Using the generic type 'MarineService.Tests.EntitySetBindingWrapper' requires '1' type arguments
var bindingWrapper = new EntitySetBindingWrapper(currentPredefinedJob.fkItems.GetNewBindingList());
有人能告诉我我需要如何调用这个构造函数并确认我将如何对生成的 BindingList 进行排序吗?