2017-04-12 93 views
0
public IEnumerable<InvalidSimContract> ValidateSims(SimSearchCriteriaContract searchCriteria) 
     { 
      var retval = new List<InvalidSimContract>(); 
      VZWSuspendLogic obj = new VZWSuspendLogic(); 
      var allowedSuspendDaysExpiredSims = searchCriteria.UserInputSims 
       .Where(s => obj.HasExpiredAllowedSuspendDays(s.SimId, searchCriteria.ServiceTypeId, searchCriteria.ToState.Id)) 
       .Select(s => s.SimNumber).ToList(); 

      if (allowedSuspendDaysExpiredSims != null) 
      { 
       return allowedSuspendDaysExpiredSims.Select((s, i) => 
       new InvalidSimContract 
       { 
        Message = String.Format("Line {0} contains SIM Number :{1} has expired the maximum allowed suspension days for this year. Allowed suspension days for the year is {2} days.", i + 1,s, _allowedSuspendDaysInLast12Months), 
        UserInput = s, 
        ImeiNumber = string.Empty, 
        LineNumber = i + 1 
       } 
      ).ToList(); 
      } 

      return retval; 
     } 

我想打印已過濾項目的索引號作爲行號。因此如何篩選所選項目的索引號。獲取所選可枚舉項目的索引

+1

可能的複製(http://stackoverflow.com/questions/27285061/ienumerable -select-with-index) – MiGro

+0

我不明白。你需要'UserInputSims'集合中被過濾的迭代的索引? – Pikoh

+0

很難理解你的問題。也許你可以將代碼減少到一些最小的例子。 – vyrp

回答

2

你必須之前添加i(指數).Where():[IEnumerable.Select與指數]的

var allowedSuspendDaysExpiredSims = searchCriteria.UserInputSims 
    .Select((s, i) => new 
    { 
     Obj = s, 
     Ix = i, 
    }) 
    .Where(s => obj.HasExpiredAllowedSuspendDays(s.Obj.SimId, searchCriteria.ServiceTypeId, searchCriteria.ToState.Id)) 
    .Select(s => new 
    { 
     s.Obj.SimNumber, 
     s.Ix, 
    }).ToList(); 

if (allowedSuspendDaysExpiredSims != null) 
{ 
    return allowedSuspendDaysExpiredSims.Select(s => 
    new InvalidSimContract 
    { 
     Message = String.Format("Line {0} contains SIM Number :{1} has expired the maximum allowed suspension days for this year. Allowed suspension days for the year is {2} days.", s.Ix + 1, s.SimNumber, _allowedSuspendDaysInLast12Months), 
     UserInput = s.SimNumber, 
     ImeiNumber = string.Empty, 
     LineNumber = s.Ix + 1 
    } 
    ).ToList(); 
}