使用 linq 查询嵌套列表

Querying a nested list using linq

我是linq初学者。如何使用 linq

查询列表对象
var dbUserSettings = new List<UserSetting> {  
    new UserSetting { 
        UserId = "abcxyz@123", 
        Applications = new List<Application> { 
            new Application { 
                ApplicationID = "application123", 
                ApplicationName = "ProtocolArchiving", 
                Settings = new List<Setting> { 
                    new Setting { 
                        SettingId = "setting123", 
                        SettingKey = "RefreshInterval", 
                        SettingValue = "20", 
                        IsActive = "true", 
                        UpdatedOn = "2017-06-22", 
                        SettingLabel = "PageRefresh" } } } } },

    new UserSetting { 
        UserId = "abcxyz@345", 
        Applications = new List<Application> { 
            new Application { 
                ApplicationID = "application345", 
                ApplicationName = "ProtocolArchiving", 
                Settings = new List<Setting> { 
                    new Setting { 
                    SettingId = "setting456", 
                        SettingKey = "UploadSetting", 
                        SettingValue = "20", 
                        IsActive = "true", 
                        UpdatedOn = "2017-06-22", 
                        SettingLabel = "Upload" } } } } },
    new UserSetting { 
        UserId = "abcxyz@567", 
        Applications = new List<Application> { 
            new Application { 
                ApplicationID = "application678", 
                ApplicationName = "ProtocolArchiving", 
                Settings = new List<Setting> { 
                    new Setting { 
                        SettingId = "setting789", 
                        SettingKey = "DownloadSetting", 
                        SettingValue = "20", 
                        IsActive = "true", 
                        UpdatedOn = "2017-06-22", 
                        SettingLabel = "Download" } } } } }
     };

 var response = dbUserSettings.Where(e => e.UserId == userID)
                   .Select(dbsetting => new UserSettingViewModel
                   {
                       SettingKey = dbsetting.Applications.Single<Setting>(s=> s == )

                   })
                   .ToArray();

我正在查询与我的用户 ID 匹配的设置密钥。

编辑:

遗漏了几件事。我在这里尝试了一些东西

SettingKey = dbsetting.Applications.FirstOrDefault().Select(sk => sk.Settings.FirstOrDefault()?.SettingKey);

错误如下

我的申请 class 看起来像这样。

public class Application
{
    public string ApplicationID { get; set; }
    public string ApplicationName { get; set; }
    public List<Setting> Settings { get; set; }
}

因为你只对每个 UserSetting 的唯一 Application 感兴趣,我想你需要这个:

var response = dbUserSettings.Where(e => e.UserId == userID)
    .Select(dbsetting => new UserSettingViewModel
    {
         SettingKey = dbsetting.Applications.FirstOrDefault()?.Settings.FirstOrDefault()?.SettingKey
    };

这只是 return 每个 UserSetting 中第一个(也可能只有)Application 个中的第一个(也可能是唯一一个)Setting。如果中间的任何列表为空(ApplicationsSettings),则 SettingKey 将是 null.