2017-02-04 11 views
-2

以下のようにJSONファイルからデータを取得しています。私は同じ年の同じ週に同じ値がある場合、値 "値"に0の値をassingnする必要があります。 LINQでどうすればいいですか?例:Linqの1週間以内に最後のレコードの値を更新する

INPUT 

ID NAME   INFOID  DATE      VALUE       WEEK 
2 AAA   31   1.11.2016 00:00:00   1,3        44 
2 AAA   32   2.11.2016 00:00:00   9,1        44 
2 AAA   33   3.11.2016 00:00:00   9,1        44 
2 AAA   34   4.11.2016 00:00:00   0,19       44 
2 AAA   37   7.11.2016 00:00:00   1,2        45 
2 AAA   38   8.11.2016 00:00:00   0,10       45 
2 AAA   39   9.11.2016 00:00:00   5,7        45 
2 AAA   40   10.11.2016 00:00:00   5,7        45 
2 AAA   41   11.11.2016 00:00:00   1,7        45 


OUTPUT 

ID NAME   INFOID  DATE      VALUE       WEEK 
2 AAA   31   1.11.2016 00:00:00   1,3        44 
2 AAA   32   2.11.2016 00:00:00   9,1        44 
2 AAA   33   3.11.2016 00:00:00   0        44 
2 AAA   34   4.11.2016 00:00:00   0,19       44 
2 AAA   37   7.11.2016 00:00:00   1,2        45 
2 AAA   38   8.11.2016 00:00:00   0,10       45 
2 AAA   39   9.11.2016 00:00:00   5,7        45 
2 AAA   40   10.11.2016 00:00:00   0        45 
2 AAA   41   11.11.2016 00:00:00   1,7        45 

期待される結果は上記(出力)である必要があります。

public class DataResolver 
{  
    public void GetDataFromJson() 
    { 
    var res = JsonConvert.DeserializeObject<List<MarketData>>(jsonData); 
    }  
} 
public class DetailInfo 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Info 
{ 
    public DetailInfo Detail { get; set; } 
    public int InfoId { get; set; } 
    public DateTime InfoDate { get; set; } 
    public double Value { get; set; } 
} 

よろしく

+0

を...何かを試してみて、それでも問題が解決しない場合は、質問 –

+0

ジョージVovosを更新してください私は質問を更新しました。私は、質問はあなたのためにはっきりしていると思います。 –

+0

LINQは更新言語ではなく*クエリ言語(したがってQ)です。つまり、LINQはあなたに毎週同じ最後の値を与えることができます。週ごとにグループ化し、日付順に並べ替え、最初のものをスキップして残っているものを更新します(ある場合)。 –

答えて

0

私はそのような問題が解決してきた:あなたはdownvotesを探している

public class DetailInfo 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public class Info 
    { 
     public DetailInfo Detail { get; set; } 
     public int InfoId { get; set; } 
     public DateTime InfoDate { get; set; } 
     public double Value { get; set; } 

     public int Week { get; set; } 
    } 

public List<Info> RefineData(List<Info> listOfInfo) 
     { 
      var orderedAndRefinedData = listOfInfo 
            .OrderBy(p => p.InfoDate) 
            .Select(p => 
               new Info 
               { 
                Detail = p.Detail, 
                InfoId = p.InfoId, 
                InfoDate = p.InfoDate, 
                Value  = p.Value, 
                Week  = WeekOfYear(p.InfoDate) 
               }).ToList(); 

      var duplicateDataListInWeek = orderedAndRefinedData 
              .GroupBy(p => new { p.Week, p.Value }) 
              .SelectMany(grp => grp.Skip(1)); 

      foreach (var dataItem in duplicateDataListInWeek) 
      { 
       dataItem.Value = 0; 
      } 

      return orderedAndRefinedData; 
     } 

     public static int WeekOfYear(DateTime date) 
     { 
      var day = (int)CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(date); 
      return CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date.AddDays(4 - (day == 0 ? 7 : day)), 
                    CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); 
     } 
関連する問題