如何在带有条件多个where条件的Entity Framework中编写查询? - c#

我正在创建一个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查询,以针对您的数据。

尝试将JS &&运算符转换为C# - javascript

我有要转换为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[…