【发布时间】:2021-03-19 19:38:04
【问题描述】:
我有以下 linq 查询:
var identities = message.Events
.Where(x => x.EventType == eventType)
.Where(x => x.Roles?.Any(y => y.RoleId == 42) == true)
.SelectMany(x => x.Roles, (parent, child) =>
new
{
parent.Id,
child.CustomerName,
child.CustomerNumber,
child.RegionId
})
.Select(x =>
new AuditFirmEmployeeCrud(x.CustomerName, x.CustomerNumber.Value, x.RegionId, x.GlobalId));
在事件列表中,我还有另一个列表 IEnumerable,我也想从中获取数据:
public class MetaData
{
string Key { get; set; }
string Source { get; set; }
string Value { get; set; }
}
但我不知道如何从多个列表中进行选择?谁能帮助我?我想尝试以某种方式将 x.Roles 和 x.MetaData 上的 SelectMany 结合起来。
这里是列表:
public class EventList
{
Event[] Events {get; set;}
}
public class Event
{
EventType Type {get; set;}
Guid Id {get; set;}
IEnumerable<Accounts>? Accounts { get; set; }
IEnumerable<MetaData>? Metadata { get; set; } // This i want to combine as well, and get the value of the Key and Value property
IEnumerable<Roles>? Roles { get; set; } // This I already got
}
所以基本上,我想将这个重写到 Linq:
foreach (var eventRow in message.Events)
{
if (eventRow.EventType == someEvent)
{
var Id = eventRow.GlobalId;
var customerNumber = eventRow.Roles.Where(x => x.RoleId == 42).Select(x => x.CustomerNumber).FirstOrDefault();
var regionId = eventRow.Roles.Select(x => x.RegionId).FirstOrDefault();
var customerName = eventRow.Metadata.Select(x => x.Key + " " + x.Value).FirstOrDefault();
var crudObj = new AuditFirmEmployeeCrud(customerName, customerNumber.Value, regionId, Id);
}
}
【问题讨论】:
-
@ThomasWeller:是吗?在我的问题中查看 MetaData 类是如何定义的。是MetaData-class中的三个属性,我想获取Value属性和Key属性的值。
-
显然我不明白。我出去了
-
@ThomasWeller:再次检查我更新的问题。 :)
-
.FirstOrDefault()- 这使它只是一个值而不是一个列表 -
@ThomasWeller 我放弃了。我出去了。