我有像
这样的实体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。
答案 0 :(得分:4)
您在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;
}
答案 1 :(得分:2)
所以你想检查一个集合的所有元素是否存在于另一个集合中。在LINQ中,可以使用Except和Any:
的组合来完成var metrics = EntitySet
.Where(x => x.Programs.Select(p => p.ID).Except(programIds).Any())
.ToList();
Fyi - 你当前的代码失败了,因为Array.Contains
期望单个项目,在这种情况下为int,而你给它一个完整的可枚举