动态修改LINQ to SQL Select语句的列

时间:2009-11-30 18:33:42

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

我正在尝试为我的应用构建一个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查询字符串并排除未提及的列。

最后,我可以用类似的方式执行select语句 JavaScript.Serialize(result.ToList());

LINQ to SQL可以实现吗?

2 个答案:

答案 0 :(得分:3)

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

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

然后将该字符串转换为表达式树并传递给您的查询提供程序。

答案 1 :(得分:1)

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