【发布时间】:2017-03-19 19:45:34
【问题描述】:
我正在尝试在我的应用程序的 Devexpress Grid 之一中实现 Server mode。
网格视图需要可查询的源,所以我不想使用 ToList() 或 AsEnumerable(将所有数据加载到应用程序内存中)。
当我使用 AsQueryable 时,我得到 LINQ to Entities 无法识别该方法...
查询详情: 表中的一列(定义)存储为 JSON 字符串。我知道它正在尝试为 Deserialize 方法找到等效的 SQL,如果您知道任何替代方法,请提出建议..
下面是查询。
var requestList = (from request in db.request_def
let requestDefinition=new JavaScriptSerializer().Deserialize(request.Definition,typeof(RequestInfo))
let user = db.Users.FirstOrDefault(p => p.PRINCIPAL == requestDefinition.Principal)
let processingAccount =user.EMAIL
select new RequestModel
{
CreatedBy = request.CreatedBy
CreatedOn = request.CreateOn,
Status = request.Status,
ProcessingAccount = processingAccount,
}).OrderByDescending(p => p.CreatedOn).AsQueryable<RequestModel>();
【问题讨论】:
-
您希望您的数据库(或 EF)如何理解
new JavaScriptSerializer().Deserialize(request.Definition,typeof(RequestInfo))应该做什么?数据库对上述任何事情一无所知。 -
我知道数据库不理解反序列化方法,想知道是否有没有反序列化的替代方法,我们可以编写一些自定义扩展方法......
-
SQL server 2016 可以使用 json,因此您可以使用原始 sql 查询而不是 EF,或者使用请求创建 sql 视图。描述已经解析并使用它而不是
request_def表(例如的替代)。
标签: c# sql entity-framework linq devexpress