繁体   English   中英

Lambda表达式内的条件C#

[英]Where condition inside lambda expression c#

我有一个像

public class Program
{    
    public int ID { get; set; }
    public bool IsActive { get; set; } 
    public string Title { get; set; }
}

public class EMetrics
{
    public int ID { get; set; }
    public bool IsActive { get; set; }
    public string Title { get; set; }
    public List<Program> Programs { get; set; }
}

我有类似的存储库方法,

IEnumerable<EMetrics> IEmetricsRepository.GetAllByProgram(params int[] programIds)
{
    var metrics = EntitySet
        .Where(x => programIds.Contains(x.Programs.Select(x => x.ID)))
        .ToList();

        return metrics;
}

[上面的代码抛出构建错误]

在这里,只有我遇到问题才能根据程序Ids数组参数获取EMetrics。

我想要列出与该程序关联的Emetrics。

您在LINQ中错误地访问了相同的输入参数。 应该通过更改内部Select来使用其他参数来重构它:

IEnumerable<EMetrics> IEmetricsRepository.GetAllByProgram(params int[] programIds)
{
    var metrics = EntitySet
        .Where(x => programIds.Contains(x.Programs.Select(y => y.ID)))
        .ToList();

    return metrics;
}

因此,您想检查一个集合中的所有元素是否都存在于另一个集合中。 在LINQ中,可以将Except和Any组合使用:

var metrics = EntitySet
    .Where(x => x.Programs.Select(p => p.ID).Except(programIds).Any())
    .ToList();

Array.Contains您当前的代码失败,因为Array.Contains期望单个项目(在这种情况下为int),而您却给出了一个完整的枚举

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM