繁体   English   中英

动态where子句实体框架3.5

[英]dynamic where clause entity framework 3.5

我是实体框架的新手。 我需要基于订单和客户开发Linq查询。

例如:string firstName可以包含三个值中的任何一个

1)null 2)Joe 3)喜欢%Joe%'

simailary我需要开发姓氏

我目前的查询是这样的

                using (NorthwindEntities ent = new NorthwindEntities())
                {
                    var UsersList = ent.User.Include("Orders").
                                Include("OrderDetails").
                                Include("OrderDetails.Products").
                               .Where(o => (firstName== null || o.firstName== firstName||o.firstName.Contains(firstName)) 
&& (LastName== null || o.LastName== LastName ||o.LastName.contains(LastName) ) 

    }

我的查询是否正确。 是否有任何其他更好的选择来编写linq实体查询。

谢谢

你可以将你的查询分成几部分,然后它会更好一些:

var UsersList = ent.User.Include("Orders")
                        .Include("OrderDetails")
                        .Include("OrderDetails.Products");

if(!string.IsNullOrEmpty(firstName));
   UsersList = UsersList.Where( o => o.firstName.Contains(firstName));

if(!string.IsNullOrEmpty(lastName));
   UsersList = UsersList.Where( o => o.lastName.Contains(lastName))

另外,检查o.firstName == firstName是多余的, Contains(firstName)部分是足够的(对于lastName是相同的)。

您可以向Queryable对象添加条件。 条件将建立,直到执行数据查询。

var UsersList = ent.User.Include("Orders")
               .Include("OrderDetails")
               .Include("OrderDetails.Products");

if (!string.IsNullOrEmpty(firstName))
   UsersList = UsersList.Where( o => o.firstName.Contains(firstName));

if (!string.IsNullOrEmpty(LastName))
   UsersList = UsersList.Where( o => o.LastName.Contains(LastName));

您可以按步骤构建查询:

    using (NorthwindEntities ent = new NorthwindEntities())
    {
       var UsersList = ent.User.Include("Orders")
                .Include("OrderDetails")
                .Include("OrderDetails.Products");
       if (LastName != null)
          UserList = UserList.Where(o => o.LastName == LastName || o.LastName.contains(LastName));

       if (FirstName != null)
          UserList = UserList.Where(o => o.firstName== firstName||o.firstName.Contains(firstName);

       // etc
   }

在执行ToList()或在foreach或类似的东西中使用它之前,查询将不会执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM