我有一个linq查询,当我有一个单个值的列表时,我现在改为拥有一个具有多个属性的List我需要更改where子句
这样可行:
List<string> etchList = new List<string>();
etchList.Add("24");
var etchVect = (from vio in AddPlas
where etchList.Any(v => vio.Key.Formatted.Equals(v))
let firstOrDefault = vio.Shapes.FirstOrDefault()
where firstOrDefault != null
select new
{
EtchVectors = firstOrDefault.Formatted
}).ToList();
但是我有一个新的硬编码列表(它将代表传入的数据:
List<ExcelViolations> excelViolations = new List<ExcelViolations>();
excelViolations.Add(new ExcelViolations
{
VioID = 24,
RuleType = "SPACING",
VioType = "Line-Line",
XCoordinate = 6132,
YCoordinate = 10031.46
});
所以新的Linq查询看起来像这样,但显然不会起作用 AddPlas是一个List,所以使用excelviolations的另一个列表,我希望它可以在excelviolations列表中的每个属性上执行
var etchVect = (from vio in AddPlas
where excelViolations.Any(vioId => vio.Key.Formatted.Equals(vioId))
let firstOrDefault = vio.Shapes.FirstOrDefault()
select new
{
EtchVectors = firstOrDefault.Formatted
}).ToList();
现在,由于这是列表中的列表,我想在每个属性中添加一些内容 例如:
where excelViolations.VioID.Any(vioId => vio.Key.Formatted.Equals(vioId))
然而,这是不可能的,但是您看到我正在尝试访问excelViolations中的VioID属性并将其与违规列表中的Key匹配
答案 0 :(得分:1)
只需更改此行
即可where excelViolations.Any(vioId => vio.Key.Formatted.Equals(vioId))
到
where excelViolations.Any(excelVio => vio.Key.Formatted.Equals(excelVio.VioID))
然后我认为它会起作用