【问题标题】:How to use Linq to select desired data如何使用 Linq 选择所需的数据
【发布时间】:2021-03-16 11:14:50
【问题描述】:

我有以下型号:

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; }

    IEnumerable<Roles>? Roles { get; set; }
}

现在,我想获取具有 EventType.Added 的数据,并且只想要那些与 Id 为 42 的角色相关的事件。

我这样做是为了排序只得到具有 EventType.Added 的它们:

var addedIdentities = eventList.Events.Where(x => x.EventType == IdentityEventType.AddedIdentity);

现在我想进一步排序,只获取属于 roleId 42 的事件的数据:

var identitiesByRoles = addedIdentities.Where(x => x.Roles.Where(y => y.RoleId == 42));

这显然不起作用,我真的不知道如何在 Linq 中以一种好的方式解决这个问题? 有什么建议吗?

【问题讨论】:

    标签: c# linq .net-core


    【解决方案1】:

    试试这个:

    var identitiesByRoles = addedIdentities.Where(x => x.Roles.Any(y => y.RoleId == 42));
    

    或者,如果x.Roles 可以是null

    var identitiesByRoles = addedIdentities.Where(x => x.Roles?.Any(y => y.RoleId == 42) == true);
    

    并与其他.Where结合:

    var addedIdentities = eventList.Events
        .Where(x => x.EventType == IdentityEventType.AddedIdentity)
        .Where(x => x.Roles?.Any(y => y.RoleId == 42) == true);
    

    【讨论】:

    • 可以在这里做一个角色和偶数类型的oneliner吗?
    • @JuggernautDev 你去吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多