0

私はこのようなことをしたい:

var apps = from app in context.Apps
    where (platform == AppPlatform.All ||
    (app.Platform == sPlatform && new Version(app.PlatformVersion) <= version))&&
    (availability == AppAvailability.All || app.Availability == sAvailability)
    select app;
return apps.ToList();

new Version(app.PlatformVersion) <= version))がエラーを引き起こしています:Only parameterless constructors and initializers are supported in LINQ to Entities.

基本的に必要なのは、エンティティモデルでapp.PlatformVersionを文字列ではなく新しいVersion()オブジェクトとして解析することですが、linq-to-entity内からこれを実行できないようです。エンティティモデルレベルでこれを行うことはできますか?他にもタイプに解析したいフィールド(文字列)があります(文字列を列挙型に解析するなど)。どうすればこれを達成できますか?

4

1 に答える 1

1

EFはLinqクエリをSQLに変換しようとし、Versionメソッドを変換する方法がないためです。したがって、最初に他の条件でクエリを実行してメモリに格納してから、複雑なLinqクエリを使用してメモリ内オブジェクトからクエリを実行できます。

技術的にはこれを行うことができます(パフォーマンスの点で間違いなく改善できます)

var apps_temp = from app in context.Apps.All().ToList();

//this query will not be translated to SQL.
var apps = from app in apps_temp
    where (platform == AppPlatform.All ||
    (app.Platform == sPlatform && new Version(app.PlatformVersion) <= version))&&
    (availability == AppAvailability.All || app.Availability == sAvailability)
    select app;


return apps.ToList();
于 2012-09-06T21:07:23.907 に答える