【问题标题】:EF4 How to create query with dynamic select and where statementEF4 如何使用动态选择和 where 语句创建查询
【发布时间】:2011-11-22 22:27:02
【问题描述】:

我正在尝试为我的模型创建某种动态加载器,我可以在其中指定我需要的属性,它的主要目的是创建一个REST API,它为单个模型提供动态信息作为JSON

API 将被例如访问 /api/model?id=581D1393-3436-4146-A397-E47CF5419453&fields=foo,bar,baz

为此,我使用了ScottGu's Blog 中描述的Dynamic LINQ,问题是我需要通过连接对多个表进行查询并从不同的表中加载数据,在这种情况下我不能这样做,据我所知。

现在我将ObjectQuery<DbDataRecord> 方法与Entity SQL 一起使用,我可以在其中创建我想要的查询,但在这种情况下我会丢失编译器验证并且更难重构。

我的问题是,对于这类问题是否有最佳实践方案?使用其他ORM 是否更容易实现?

问候

鲁斯兰 A.

【问题讨论】:

  • 您可以在第一步的基础上进行第二步,这意味着您可以提取常用查询并将数据存储在内存中(使用 .ToList() 或类似的),然后根据什么您只需要简单的 if..else 或 switch 即可完成其余逻辑。动态 Linq 已经结束了。

标签: entity-framework-4 linq-to-entities dynamic-data objectquery


【解决方案1】:

其实我认为你可以做到,虽然你认为你做不到。我这么说是因为延迟加载。

using(var someContext = new SomeContextEntities())
{
    var data = someContext.Entity;

    foreach(var kvp in queries)
    {
        switch(kvp.Key)
        {
            case "q1":
                var val = kvp[kvp.Key];
                data = data.Where(q => q.q1 == val);
                break;
            case "q2":
                var val2 = kvp[kvp.Key];
                data = data.Where(q => q.q2 == val2);
                break;
            case "q3":
                var val3 = kvp[kvp.Key];
                data = data.Where(q => q.q1.q3 == val3);
            ...
        }
    }
    return data.ToList();
}

如果你查看生成的脚本或结果集,你会得到你想要的。

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 2019-10-03
    • 1970-01-01
    • 2019-08-27
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多