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 回答