2017-06-29 24 views
1
public partial class GoodsCode_EAN 
{ 
    public string GoodsCode { get; set; } 
    public string EAN { get; set; } 
} 

これはGoodsCodeは毎回ユニークですが、EANはないSystem.NotSupportedExceptionこの 'System.Linq.Queryable.GroupBy'メソッドのオーバーロードは、現在サポートされていません。

var test = _context.GoodsCode_EAN 
         .FromSql($"SELECT * FROM dbo.fnGoodsCode_EAN({SavedData.Entities.id_cenoprov})") 
         .GroupBy(p => p.EAN, StringComparer.OrdinalIgnoreCase) 
         .ToDictionary(g => g.Key, g => g.ToList(), StringComparer.OrdinalIgnoreCase); 

だから私はちょうどこの例外を辞書と取得するためにグループに同じEANを持つすべての要素を試すモデル...

ですSystem.NotSupportedException: '式 の値を解析できませんでした(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1 [ProfiKasa.Portal.Models.newModel.CisloZbozi_EAN])。 FromSql( "SELECT * FROM dbo.fnCisloZbozi_EAN(1)"、__p_0).GroupBy(p => p.EAN、__p_1) ':この' System.Linq.Queryable.GroupBy 'メソッドのオーバーロードは、現在サポートされていない です。

私がToDictionaryを削除すると... アイデアはありますか? ありがとう!

+0

再び –

+0

同じエラーもう一度.ToDictionary前.ToArray()()およびテストを追加... –

+0

んEFは 'StringComparer.OrdinalIgnoreCase'を理解していますか?私は 'p.EAN.ToLower()'が助けになると思います。 – user3185569

答えて

1

エンティティフレームワークは、最初にStringComparerの列挙を取り消すことはありません。実際には、第2パラメータ(IEqualityComparer<T>)をとるGroupByのオーバーロード全体をサポートしていません。

それがサポートされ、SQLに変換することができますので、あなたが代替として ToLower()を使用することができます

.GroupBy(p => p.EAN.ToLower()) 
+0

ありがとうございました! だから1 - '.FromSql($ "SELECT * FROM dbo.fnGoodsCode_EAN({SavedData.Entities.id_cenoprov})") .GroupBy(P => p.EAN) .ToDictionary(G => g.Key 、g => g.ToList()); –

+0

もう1つの解決策は、 - '.FromSql($" SELECT * FROM dbo.fnGoodsCode_EAN({SavedData.Entities.id_cenoprov}) ") .ToLookup(l => l .EAN) .ToDictionary(p => p.Key、p => p.ToList()、StringComparer.OrdinalIgnoreCase); ' –

関連する問題