EF4如何使用动态select和where语句创建查询

时间:2011-09-22 14:59:22

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

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

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

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

现在我使用Entity SQL方法ORM,我可以创建一个查询,但是在这种情况下,我失去了编译器验证,并且更难以重构。

我的问题是,是否存在针对此类问题的最佳实践方案?用其他{{1}}来实现它可能更简单吗?

问候

Russlan A。

1 个答案:

答案 0 :(得分:0)

实际上我认为你可以做到,尽管你认为你做不到。我这样说是因为装载了懒散。

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();
}

如果查看生成的脚本或结果集,您将获得所需的内容。