我是实体框架的新手。 我需要根据订单和客户开发Linq查询。
for eg:string firstName可以包含三个值中的任何一个
1)null 2)乔 3)喜欢%Joe%'
我当前的查询是这样的
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实体查询。
由于
答案 0 :(得分:2)
你可以将你的查询分成几部分,然后它会更好:
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也一样)。
答案 1 :(得分:2)
您可以向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));
答案 2 :(得分:0)
您可以按步骤构建查询:
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
或类似的内容中使用它之前,查询将不会执行。