我正在尝试为我的应用构建一个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可以实现吗?
答案 0 :(得分:3)
手动构建Select表达式树的另一种方法是Dynamic LINQ,它提供了一个带有字符串的Select
方法:
var filter = "name,user";
var result = Submissions.Select("new(" + filter + ")");
然后将该字符串转换为表达式树并传递给您的查询提供程序。
答案 1 :(得分:1)
是。您将要研究Modifying Expression Trees。特别是MemberInit Expression。