Linq查询从List <string>更改为List <t> where子句</t> </string>

时间:2013-05-10 05:18:55

标签: c# linq

我有一个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匹配

1 个答案:

答案 0 :(得分:1)

只需更改此行

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

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

然后我认为它会起作用