我有一个问题,我正在尝试按这些对象内部的某些键属性对通用对象列表进行分组:
public void GroupChanges<TResult>(List<TResult> changes)
{
const string KeyPropertyName = "TransactionSequence";
List<IGrouping<byte[], TResult>> changeSet = changes
.GroupBy(change => /*change.TransactionSequence */ <- property avaible in every object that is
change.GetType().GetProperty(KeyPropertyName).GetValue(change)
, new ArrayComparer<byte>())
.ToList();
}
数据和模型的模型非常简单,我有一个抽象的泛型模型,其中最重要的是包含Key属性,模型继承了该属性,并且数据是从Db填充的,数据结构只是这些模型的泛型列表。
现在,如果我强烈键入模型就可以了,如何更改?
最佳答案
您需要声明一个接口,该接口由将传递给该方法的所有类型实现。并将其作为类型约束添加到您的方法中。您可以访问界面的属性。
interface ICommon
{
byte[] TransactionSequence { get; set; }
}
public void GroupChanges<TResult>(List<TResult> changes)
where TResult: ICommon
{
List<IGrouping<byte[], TResult>> changeSet = changes
.GroupBy(change => change.TransactionSequence , new ArrayComparer<byte>())
.ToList();
}
注意:类型约束也将适用于抽象/基类。如果您通过带有EF的IQueryable进行LINQ,这将不起作用