【问题标题】:Dynamically Modifying a LINQ to SQL Select Statement's Columns动态修改 LINQ to SQL Select 语句的列
【发布时间】:2009-12-01 03:03:48
【问题描述】:

我正在尝试为我的应用构建一个 REST-ful API。目前我有这样的东西:
www.example.com/submissions/?format=json

这将以 JSON 格式返回最新的十次提交。每个对象都有其详细信息,例如提交名称、创建日期、用户、正文等。

我想做一些事情,例如:
www.example.com/submissions/?format=json&filter=name,user

过滤器应该请求返回相同的结果,但只包含提到的细节,即每个对象只有一个名称和用户。

就 JSON 输出而言,这相当简单。我可以从数据库中加载所有列,并创建和序列化一个只包含过滤器中的列的对象。但是,我不想加载数据库中的所有列 - 我只想用我将包含在响应中的列来打扰我的数据库

我想做这样的事情:

var result = from record in Submissions
             select
             {
                Name,
                Date,
                User,
                Body
             };

现在我有了 result 对象,它是 IQueryable,所以还没有调用数据库。

然后,我应该检查filter 查询字符串并排除未提及的列。

最后,我可以使用类似
JavaScript.Serialize(result.ToList());

的方式执行 select 语句

LINQ to SQL 可以做到这一点吗?

【问题讨论】:

    标签: c# .net linq linq-to-sql


    【解决方案1】:

    另一种手动构建 Select 表达式树的方法是 Dynamic LINQ,它提供了一个接受字符串的 Select 方法:

    var filter = "name,user";
    var result = Submissions.Select("new(" + filter + ")");
    

    字符串然后被翻译成表达式树并传递给您的查询提供程序。

    【讨论】:

      【解决方案2】:

      是的。您将要研究Modifying Expression Trees。特别是MemberInit Expression

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 2017-09-26
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 2020-10-31
        • 2016-05-17
        相关资源
        最近更新 更多