kev*_*n c 4 c# lambda asp.net-web-api asp.net-mvc-5 asp.net-web-api2
我试图将Lambda表达式传递给Web API 2调用,但不确定如何使其工作.
我来给你一些背景知识
设置利用Entity Framework与数据库通信的Web API 2.
我的应用程序最终调用Web API 2以便能够与数据库通信.我的公司最终要求这样可以增加数据访问层的安全性.
我们在App Side上构建了一个存储库,可以很好地与Web API进行通信.但是,我们要添加的函数之一是包含Lambda表达式的FIND函数.
public IEnumerable<T> FindAll(Func<T, bool> exp)
{
HttpClientHandler hndlr = new HttpClientHandler();
hndlr.UseDefaultCredentials = true;
HttpClient httpClient = new HttpClient(hndlr);
httpClient.BaseAddress = new Uri(ADMS.Utilities.Settings.DALService);
HttpResponseMessage response = httpClient.GetAsync(string.Format("api/{0}/{1}", typeof(T).Name, exp)).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<IEnumerable<T>>().Result.ToList();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我现在的问题是在控制器的Web API 2端如何让它接受Lambda Expression?我需要在控制器中放置什么才能看到这个?我需要转换Lambda表达式吗?
你无法直接将Lamda Expression传递给Web Api 2.当你说你必须以某种方式转换它时,你是对的.这里有一些选择.
使用odata
这适用于Entity Framework,并附带Visual Studio(2012/2013)中的模板.odata位于Web Api 2之上.基本上,已经为您定义了许多运算符(等于,包含,大于等).使用odata和实体框架,一切都为您完成.默认情况下,这应该是Visual Studio的一部分,它是微软推动的东西.http://www.odata.org/
手动转换
控制器中的每个方法都可以接受所需的参数(int skip,int take,string where,string order by)然后由你来应用它.这意味着您必须尝试提出自己的规则和语法才能使其发挥作用.
使用动态linq
如相关答案中所述.这是一种在运行时动态使用linq构建的方法.您基本上可以在查询字符串中传递它并将其传递给它.你必须弄清楚你的Repository接受什么,你的Api接受什么以及如何转换或传递它.你还必须要小心,你不允许超出你真正想要的.http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |