Tenant如果我有一個 IEnumerable,我如何使用 linq 拆分它們以在基于、UserId和AccountId的唯一執行串列中給出一個串列Bucket。
我正在尋找表格串列的串列IEnumerable<(Tenant,UserId,AccountId,Bucket),IEnumerable<TradeExecuted>>。
public class TradeExecuted : INotification
{
public Guid Tenant { get; init; }
public UserId UserId { get; init; }
public string AccountId { get; init; }
public string Bucket { get; init; }
/* other fields */
}
我在下面給出了 UserId 物件,但相信通過ValueObject 本文解決了對唯一性的擔憂。
public class AccountId : ValueObject
{
public string Account { get; init; }
public string Broker { get; init; }
public AccountId(string broker, string account)
{
Broker = broker;
Account = account;
}
protected override IEnumerable<object> GetEqualityComponents()
{
yield return Broker;
yield return Account;
}
}
字典是可以的,但要記住以下內容:
var splitMessages = messages
.GroupBy(x => (x.Bucket, x.AccountId, x.Tenant, x.UserId))
.ToDictionary(key => key.Key);
如果更容易獲得串列串列,我也可以 - 非常感謝指標。
uj5u.com熱心網友回復:
我不確定為什么您需要在分組之外做任何事情,GroupBy提供了IEnumerable<IGrouping<TKey,TElement>>一個IGrouping擴展名,IEnumerable<out TElement>所以正如您所看到的,使用GroupBy()為您提供了一個串列串列。
這就是我能做到這一點的原因。
var splitMessages = messages
.GroupBy(x => (x.Bucket, x.AccountId, x.Tenant, x.UserId));
var castedMessages = (IEnumerable<IEnumerable<TradeExecuted>>)splitMessages;
我不能說我完全理解這種形式是什么IEnumerable<(Tenant,UserId,AccountId,Bucket),IEnumerable<TradeExecuted>> IEnumerable被描述為具有一個協變通用引數。看起來你想要的正是 IEnumerable<IGrouping<..>> 提供的,它是一個串列串列,其中包含鍵
uj5u.com熱心網友回復:
嘗試
var splitMessages = messages
.GroupBy(x => (x.Bucket, x.AccountId, x.Tenant, x.UserId))
.ToDictionary(key => key.Key, values = values.Select(s => s);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477247.html
上一篇:在c#中比較兩個List<string>并找到重復項
下一篇:如何在perform_create中使用Validator來限制DjangoRestFramework的影像上傳大小?
