C# 动态where子句实体框架3.5
我不熟悉实体框架。 我需要开发一个基于订单和客户的Linq查询 例如:stringfirstname可以有三个值中的任意一个 1) 空的 2) 乔 3) 像%Joe%' simailary我需要为lastname开发 我当前的查询是这样的C# 动态where子句实体框架3.5,c#,linq,entity,C#,Linq,Entity,我不熟悉实体框架。 我需要开发一个基于订单和客户的Linq查询 例如:stringfirstname可以有三个值中的任意一个 1) 空的 2) 乔 3) 像%Joe%' simailary我需要为lastname开发 我当前的查询是这样的 using (NorthwindEntities ent = new NorthwindEntities()) { var UsersList = ent.
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
是多余的,包含(firstName)
部分就足够了(与lastName相同)。您可以将查询拆分为多个部分,这样会更好:
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
是多余的,而包含(firstName)
部分就足够了(与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
或类似操作中使用它时,查询才会执行。您可以分步骤建立查询:
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
或类似操作中使用它时,查询才会执行。您可以向可查询对象添加条件。在执行数据查询之前,这些条件将不断累积
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));
可以向可查询对象添加条件。在执行数据查询之前,这些条件将不断累积
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));
如果您是实体框架的新手。不要使用.NET3.5SP1附带的EF1.0。有一些问题。如果您是实体框架新手,请使用下一代EF 4.0。不要使用.NET3.5SP1附带的EF1.0。有一些问题。您可以使用下一代EF 4.0。是的,因为您只定义了查询,而查询尚未执行,所以将其拆分为逻辑部分是有意义的。是的,因为您只定义了查询,而查询尚未执行,所以将查询拆分为逻辑部分是有意义的。