Ну, не уверен, что это проблема типа "не вижу дерево из леса". Если вы группируете по {deviceId, accountId}
, у вас уже есть как нулевые, так и ненулевые RFID в группе. Если я вас правильно понял, {deviceId, accountId} имеет уникальный rfid, если это так, просто извлеките первый ненулевой rfid из группы и всех ее элементов в качестве значений:
var p = from e in events
group e by new { e.accountId, e.deviceId } into g
let rfid = g.First(ge => ge.rfid != null).rfid
select new {
Key = new { g.Key.accountId, g.Key.deviceId, rfid },
Values = g.ToList()
};
Если, с другой стороны, на вашем устройстве, в комбинированном аккаунте, может быть несколько RFID, то у вас нет звукового решения, так как nfled rfid может принадлежать любому аккаунту, устройству, RFID.
Примечание: чтобы это работало, у вас должен быть хотя бы один ненулевой rfid в каждой комбо, иначе First()
вылетит и сгорит. С другой стороны, если у вас нет ненулевого rfid в combe, нет способа узнать, что это такое, во-первых, можно использовать FirstOrDefault, но тогда вы получите несколько нулевых ключей, по одному для каждой учетной записи, устройства. комбо без RFID.