2016-12-16 6 views
0

私は選択を行っているこのlinqクエリを持っており、合計を合計するために、各グループキーの下で合計を合計しようとしています。値は文字列であり、文字列を合計することはできません。ただし、intに変換しようとすると、エラーが発生します。LINQからintへの変換

LINQ to Entitiesは、メソッド 'Int32 ToInt32(System.String)'を認識せず、このメソッドをストア式に変換できません。

var dataSet = entities.BL_MT_CATEGORY 
      .Distinct() 
      .Where(d => (iGeography.FirstOrDefault() == "" || iGeography.Contains(d.Geography)) 
      && (iRetailer.FirstOrDefault() == "" || iRetailer.Contains(d.Retailer)) 
      && (iCountry.FirstOrDefault() == "" || iCountry.Contains(d.Country)) 
      && (iAirport.FirstOrDefault() == "" || iAirport.Contains(d.Airport)) 
      && (iShop.FirstOrDefault() == "" || iShop.Contains(d.StoreName)) 
      && (iCategory.Contains(d.Category)) 
      && (d.Values == "Sum of EuroValue")) 
      .GroupBy(x => x.Category) 
      .Select(g => new { 
       C201408 = g.Sum(x => Convert.ToInt32(x.C201408)) 
      }) 
      .ToList(); 
+0

@vendettamit 'string'と' int'の間に明示的なキャストはありません。 – Abion47

+0

エンティティ・フレームワーク関数、 –

答えて

1

クエリの外部で変換を移動してみてください。

var dataSet = entities.BL_FERRERO_MT_CATEGORY 
     .Distinct() 
     .Where(d => (iGeography.FirstOrDefault() == "" || iGeography.Contains(d.Geography)) 
     && (iRetailer.FirstOrDefault() == "" || iRetailer.Contains(d.Retailer)) 
     && (iCountry.FirstOrDefault() == "" || iCountry.Contains(d.Country)) 
     && (iAirport.FirstOrDefault() == "" || iAirport.Contains(d.Airport)) 
     && (iShop.FirstOrDefault() == "" || iShop.Contains(d.StoreName)) 
     && (iCategory.Contains(d.Category)) 
     && (d.Values == "Sum of EuroValue")) 
     .ToList() 
     .GroupBy(x => x.Category) 
     .Select(g => new { 
      C201408 = g.Sum(x => Convert.ToInt32(x.C201408))}); 

これは、LINQ to Entitiesが有効なクエリを変換するためのものです。その後、.Sum()のグループ化と選択を実行します。

+0

を使用しますが、非常に非効率的です。しかし、良いL2Eの解決策はありません。そのため、数字/日付を文字列として保存しないでください。 –

+0

あなたはそれが効率的ではないということは間違いありません。あなたが述べたとおり、データが正しく保存されていないと、非常に効率的ではありません。また、アプリケーションによっては、このような特定の最適化がそれほど重要ではないかもしれません。 –

0

総計する列と集計する列のみを合計よりも取得します。

var dataSet = entities.BL_FERRERO_MT_CATEGORY 
     .Distinct() 
     .Where(d => (iGeography.FirstOrDefault() == "" || iGeography.Contains(d.Geography)) 
     && (iRetailer.FirstOrDefault() == "" || iRetailer.Contains(d.Retailer)) 
     && (iCountry.FirstOrDefault() == "" || iCountry.Contains(d.Country)) 
     && (iAirport.FirstOrDefault() == "" || iAirport.Contains(d.Airport)) 
     && (iShop.FirstOrDefault() == "" || iShop.Contains(d.StoreName)) 
     && (iCategory.Contains(d.Category)) 
     && (d.Values == "Sum of EuroValue")) 
     .Select(x=>x.C201408) 
     .ToList() 
     .Sum(x=>int.Parse(x));