1

我有一个 linq 查询,它在我有一个单一值的列表时可以工作,现在我更改为拥有一个具有多个属性的列表,我需要更改 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 是一个列表,所以使用这个其他的 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 的属性并将其与 vio 列表中的 Key 匹配

4

1 回答 1

1

只需更改此行

where excelViolations.Any(vioId => vio.Key.Formatted.Equals(vioId))

where excelViolations.Any(excelVio => vio.Key.Formatted.Equals(excelVio.VioID))

然后我认为它会起作用

于 2013-05-10T06:02:49.287 回答