首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态构建LINQ-To-Entities Where子句

动态构建LINQ-To-Entities Where子句
EN

Stack Overflow用户
提问于 2014-12-28 15:00:19
回答 2查看 202关注 0票数 1
代码语言:javascript
复制
(from s in repository.ItemOwners.Include("OwnerDetails")
 where s.ItemId == searchCriteria.ItemID && 
       s.OwnerDetails.LocationId == searchCriteria.LocationID
 select new { s.OwnerDetails.OwnerName, s.OwnerDetails.MobNumber }).ToList();

有时OwnerIDItemId将为零,那么只会提供LocationID作为搜索条件,在这种情况下,LINQ应为

代码语言:javascript
复制
(from s in repository.ItemOwners.Include("OwnerDetails")
 where s.OwnerDetails.LocationId == searchCriteria.LocationID
 select new { s.OwnerDetails.OwnerName, s.OwnerDetails.MobNumber }).ToList();

有时会提供完整的OwnerIDItemIDLocationID作为搜索条件,然后LINQ将如下所示

代码语言:javascript
复制
(from s in repository.ItemOwners.Include("OwnerDetails")
 where s.OwnerId == searchCriteria.OwnerID && 
       s.ItemId == searchCriteria.ItemID && 
       s.OwnerDetails.LocationId == searchCriteria.LocationID
 select new { s.OwnerDetails.OwnerName, s.OwnerDetails.MobNumber }).ToList();

这里只有where子句在变化,请帮我解决。如何动态构建where子句(请注意,这里我有一个导航属性,它是OwnerDetails.LocationId)。

EN

回答 2

Stack Overflow用户

发布于 2014-12-28 15:09:30

通过使用基于方法的查询,您可以轻松地完成此操作。您可以一次添加一个条件,最后调用SelectToList

代码语言:javascript
复制
// Where(x => true) might not be necessary, you can try skipping it.
var query = repository.ItemOwners.Include("OwnerDetails").Where(x => true);

if (searchCriteria.OwnerID != null)
    query = query.Where(s => s.OwnerID == searchCriteria.OwnerID);
if (searchCriteria.ItemID != null)
    query = query.Where(s => s.ItemID == searchCriteria.ItemID);
if (searchCriteria.OwnerID != null)
    query = query.Where(s => s..OwnerDetails.LocationId == searchCriteria.LocationID);

var results = query.Select(s => new { s.OwnerDetails.OwnerName, s.OwnerDetails.MobNumber }).ToList();
票数 3
EN

Stack Overflow用户

发布于 2014-12-28 15:11:12

最简单的方法就是检查Where子句中的零条件:

代码语言:javascript
复制
(from s in repository.ItemOwners.Include("OwnerDetails")
where (searchCriteria.OwnerID == 0 || s.OwnerId == searchCriteria.OwnerID) && 
(searchCriteria.ItemID == 0 || s.ItemId == searchCriteria.ItemID) && 
s.OwnerDetails.LocationId == searchCriteria.LocationID
select new { s.OwnerDetails.OwnerName, s.OwnerDetails.MobNumber }).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27674335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档