我正在创建一个wcf应用程序,该应用程序连接到数据库以使用实体框架为客户获取一些数据。该概念是根据搜索参数搜索客户。用户可以提供全部或很少或至少一个搜索参数。但是我在实体框架方面还很陌生,并且对如何执行此操作感到困惑。我可以通过考虑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);
请通过建议如何仅使用很少或一个参数来获得结果来帮助我。
谢谢
参考方案
实体框架查询是“延迟”查询。在您开始要求结果之前,它们实际上不会运行。这意味着您可以分段构建查询,并且(大部分)它的工作原理与一个较大的查询完全相同。
就您而言,您可以执行以下操作:
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);
最后,当您执行customers
查询(例如,调用ToList
或使用foreach
循环)时,EF会将所有较小的Where
子句合并为一个SQL查询,以针对您的数据。
我有要转换为C#的JS代码。由于某种原因,我的C#方法返回的值比JS函数的返回值小10。我尝试更改多个内容并检查JS中&&运算符的含义,但似乎无法弄清楚我在做什么错。正确的返回值为97。JavaScript功能和用法:function rir(t, e, c, n) { return t > e && t <= c…
SQL Joins与Java代码? - java我有这样的查询Select Folder.name from FROM FolderTable,ValidFolder, ValidFolderGroup, ValidUser, ValidLocation, ValidDepartment where ValidUser.LocationCode *= ValidLocation.LocationCode …
Play Framework 2中的系统类加载器 - java我使用的是Play 2.2.2,我有一个外部jar,它试图从同一jar的根目录加载XML资源。它使用System.class.getClassLoader().getResource("/Blabla.xml")这样做。这失败了,因为显然Play拥有一个奇怪的类加载器层次结构:ReloadableClassLoader和几个父级。该层次结…
如何以编程方式将ListView滚动到最后一个元素-Compact Framework - c#我正在使用Windows Mobile 6.1上的3.5 Compact Framework开发应用程序。我有一个ListView,添加项目时想自动滚动此列表。我能怎么做? 参考方案 listView.EnsureVisible(listView.Items.Count - 1);
SQLAlchemy中的反射不适用于MS SQL Server系统表吗? - python我试图在MS SQL Server数据库中反映系统表:from sqlalchemy import engine, create_engine, MetaData, Table meta = MetaData() url = engine.url.URL( "mssql+pyodbc", username=credentials[…