gpt4 book ai didi

c# - 按其属性对通用对象列表进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 19:45:45 25 4
gpt4 key购买 nike

我有一个问题,我正在尝试通过这些对象内部的某些关键属性对通用对象列表进行分组,例如:

    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 填充,数据结构只是这些模型的通用列表。

现在,如果我强类型模型就OK了,这怎么能改变呢?

最佳答案

您需要声明一个接口(interface),该接口(interface)由您将传递给该方法的所有类型实现。并将其作为类型约束添加到您的方法中。您可以访问接口(interface)的属性。

    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,这将不起作用

关于c# - 按其属性对通用对象列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45955199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com