c# - 动态构建 LINQ-To-Entities Where 子句

标签 c# linq entity-framework linq-to-sql linq-to-entities

我如何动态构建 where 子句,有时 OwnerID 将为零,只有 itemIDLocationID 将作为搜索提供标准,在这种情况下,LINQ 应该是

(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应该是

(from s in repository.ItemOwners.Include("OwnerDetails")
 where s.OwnerDetails.LocationId == searchCriteria.LocationID
 select new { s.OwnerDetails.OwnerName, s.OwnerDetails.MobNumber }).ToList();

有时会提供整个 OwnerIDItemIDLocationID 作为搜索条件,那么 LINQ 会像这样

(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)。

最佳答案

您可以使用基于方法的查询轻松地做到这一点。您可以一次添加一个条件,并在最后调用 SelectToList:

// 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();

关于c# - 动态构建 LINQ-To-Entities Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27674335/

相关文章:

c# - 如何使用其名称调用方法?

c# - 从要在 OrderBy 中使用的方法返回表达式

c# - 无法将类型 '.List<AnonymousType#1>' 隐式转换为 '.List<WebApplication2.Customer>'

c# - 停止 C# 在编译错误时暂停调试

c# - 在 TreeView 中显示 "root"节点

c# - WPF 类库中的程序集范围/根级样式

c# - AsParallel() 顺序执行

c# - 如何使用 C# (XNamespace/XElement) 导航 XML 文档

entity-framework - EF4 Code-First 中 OnModelCreating 的目的是什么?

c# - Entity Framework 计数效率