bar*_*san 2 c# sql wcf entity-framework
我正在创建一个wcf应用程序,它连接到DB以使用Entity Framework为客户获取一些数据.该概念是基于搜索参数搜索客户.用户可以提供全部或几个或至少一个搜索参数.但我在实体框架中相当新,并且对如何做到这一点感到困惑.我可以通过考虑c#侧的If - Else条件在传统的SQL编码中执行此操作.
这是我的代码,它获取了所有的参数:
var customers = from o in natCustomer.CustomerLists
select o;
customers = customers.Where(c => c.Name == sName && c.Age == iAge
&& c.Gender == sGender && c.Height == dHeight && c.Weight == dWeight
&& c.Nationality == sNationality
&& c.EyeColor == sEyeColor && c.SpecialMark == sSpecialMark);
Run Code Online (Sandbox Code Playgroud)
请通过建议如何仅使用少量或一个参数来获得结果来帮助我.谢谢
实体框架查询是"延迟"查询.直到你开始要求结果,它们才会真正运行.这意味着您可以逐段构建查询,它(大部分)将完全像一个更大的查询.
在您的情况下,您可以执行以下操作:
var customers = from o in natCustomer.CustomerLists
select o;
if (!string.isNullOrEmpty(sName))
customers = customers.Where(c => c.Name == sName);
if (!string.isNullOrEmpty(sNationality))
customers = customers.Where(c => c.sNationality == sNationality);
if (!string.isNullOrEmpty(SpecialMark ))
customers = customers.Where(c => c.SpecialMark == SpecialMark);
Run Code Online (Sandbox Code Playgroud)
最后,当您执行customers
查询(例如,调用ToList
或使用foreach
循环)时,EF会将所有这些较小的Where
子句合并到一个SQL查询中,以针对您的数据运行.