2009-11-30 36 views
1

我正在尝试为我的应用程序构建一个REST-ful API。目前我有这样的:
www.example.com/submissions/?format=json动态修改LINQ to SQL选择语句的列

这将返回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的?

回答

3

由手工打造您的选择表达式树的方法是Dynamic LINQ,它提供了一个Select方法,需要一个字符串:

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

的字符串,然后转换成一个表达式树,并到您的查询提供通过。

+0

这将会容易得多... – bytebender 2009-11-30 21:14:21