Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Linq筛选具有子列表的项列表以删除C中不允许的项?_C#_List_Linq - Fatal编程技术网

C# 如何使用Linq筛选具有子列表的项列表以删除C中不允许的项?

C# 如何使用Linq筛选具有子列表的项列表以删除C中不允许的项?,c#,list,linq,C#,List,Linq,我有一个两层列表对象,我正在尝试将所需数据选择到另一个列表中。请参考以下型号和样本数据 在本例中,我只想从列表中选择user_access==true,但无法正确获取它。选项部分中的数据不会被过滤。 我所尝试的 menudata = menusetup.Where(e => e.user_access == true) .Where(e => e.Options.Any(s => s.user_access == true)).ToLis

我有一个两层列表对象,我正在尝试将所需数据选择到另一个列表中。请参考以下型号和样本数据

在本例中,我只想从列表中选择user_access==true,但无法正确获取它。选项部分中的数据不会被过滤。 我所尝试的

menudata = menusetup.Where(e => e.user_access == true)
                    .Where(e => e.Options.Any(s => s.user_access == true)).ToList();
请给我一些建议

谢谢

private class MenuModel
{
    public string Id { get; set; } // menu type
    public List<MenuModel> Options { get; set; }
    public string Value { get; set; }
    public string imgUrl { get; set; }
    public string Count { get; set; }
    public string About { get; set; }
    public bool user_access { get; set; } = false;
    public bool vendor_access { get; set; } = false;
}
要求:从menuSetup序列中查询所有具有真正UserAccess的MenuModel,每个MenuModel及其具有真正UserAccess的选项

var result = menuSetups.Where(menuSetup => menuSetup.UserAccess)
    .Select(menuSetup => new
    {
        Id = menuSetup.Id,
        Value = menuSetup.Value,
        UserAccess = true,         // do you really need this? you already know that it's true

        Options = menuSetup.Options
            .Where(option => option.UserAccess)
            .Select(option = > new
            {
                Id = option.Id,
                Value = option.Value,
                UserAccess = true,
            })
            .ToList(),
    });
换句话说:从menuSetups序列中,仅保留那些具有真实值的menuSetups供UserAccess使用。从每个剩余的菜单集获取属性

仅保留每个剩余菜单设置程序中对UserAccess具有真实值的选项。并选择属性

几点建议

如果只选择实际计划使用的属性,则效率更高。不要选择外键,也不要选择您已经知道其值的其他值

不要使用UserAccess==true。它给人的印象是你不懂布尔语。这种编码风格导致:

if (a == true)
    b = true;
else
    b = false;
而不是:

b = a;

为什么还有第二个。其中,我会尝试剪切它,看看它是否只适用于第一个。您当前的查询将从menusetup返回所有都为1的项。满足用户_访问==true和2。在选项中至少有一个选项是user_access==trueOlivier,该选项不起作用。它也不会过滤用户访问的选项。嗨,奥利弗,我已经在我的问题正文中添加了预期的输出。至于theID,请忽略它。它用于标识它是否为菜单组。Thnks@WilsonTeo像性别、种类、类别或类似的名字比Id更合适吗?
if (a == true)
    b = true;
else
    b = false;
b = a;