C# c选择Many,从列表中的嵌套模型收集信息

C# c选择Many,从列表中的嵌套模型收集信息,c#,linq,bamboo,C#,Linq,Bamboo,我正在做一个项目,我正在努力清理一些代码。我可以得到我需要的信息使用2行,但我是新的使用SelectMany和数字,也许我看这个错误。所以我想把我的两行代码转换成一行代码,如果可能的话 选择:我需要一个特定名称的BambooDeployModel,在示例中,“test”是该模型的变量。 然后,一旦它将我的列表缩小到一个特定的模型,我需要按名称选择测试环境 以下是我的台词: List<BambooDeployModel> deployments var q = deployments.

我正在做一个项目,我正在努力清理一些代码。我可以得到我需要的信息使用2行,但我是新的使用SelectMany和数字,也许我看这个错误。所以我想把我的两行代码转换成一行代码,如果可能的话

选择:我需要一个特定名称的BambooDeployModel,在示例中,“test”是该模型的变量。 然后,一旦它将我的列表缩小到一个特定的模型,我需要按名称选择测试环境

以下是我的台词:

List<BambooDeployModel> deployments
var q = deployments.SelectMany(b => b.environments.Where(f => f.name ==    "Test"), (b, f) => f).SelectMany(f => deployments.Where(o => o.name == test)).Distinct();
var p = q.SelectMany(b => b.environments).Where(f => f.name == "Test").Distinct();
这是一个模型,它只是一个通用模型,基于我们系统中的部署,从竹子那里得到的值

public class BambooDeployModel
{
    public int id { get; set; }
    public GenericSetKey key { get; set; }
    public string name { get; set; }
    public GenericSetKey planKey { get; set; }
    public string description { get; set; }
    public List<Environment> environments { get; set; }
    public Operations operations { get; set; }
}
public class GenericSetKey
{
    public KeyValuePair<string, string> key { get; set; }
}
public class Environment
{
    public int id { get; set; }
    public GenericSetKey key { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public int deploymentProjectId { get; set; }
    public Operations operations { get; set; }
    public string position { get; set; }
    public string configurationState { get; set; }
}
public class Operations
{
    public bool canView { get; set; }
    public bool canEdit { get; set; }
    public bool canDelete { get; set; }
    public bool allowedToExecute { get; set; }
    public bool canExecute { get; set; }
    public bool allowedToCreateVersion { get; set; }
    public bool allowedToSetVersionStatus { get; set; }
}

为什么您的SelectMany甚至不使用SelectManyf=>deployments.Whereo=>o.name==test中传递的项?这与Distinct的结合基本上使第一个SelectMany变得毫无意义。我不确定,但我认为您只需要部署。Whered=>d.name==test.SelectManyd=>d.environments.Wheree=>e.name==test;不太清楚在那之后你是否需要一个明确的答案,但这应该不会有什么伤害。这是我第一次尝试让任何东西都起作用。它起作用了,所以我一直保持原样直到现在。我知道是积垢。这就是为什么我想在这里得到答案。不过,你的第二条评论起了作用,谢谢!