发布
社区首页 >问答首页 >为什么这个LINQ Where子句不返回结果?

为什么这个LINQ Where子句不返回结果?
EN

Stack Overflow用户
提问于 2010-09-03 11:59:04
回答 4查看 894关注 0票数 1

我们有一个具有DateTime属性DateDestroyed的实体。查询需要返回该值介于可为空的DateTimes、startDateendDate之间的结果。

我拥有的where子句是:

代码语言:javascript
代码运行次数:0
复制
.Where(x => startDate.HasValue ? startDate <= x.DateDestroyed : true)
.Where(x => endDate.HasValue ? x.DateDestroyed <= endDate : true);

查询始终不返回任何结果。我很确定我没有正确地编写这个查询,但是不知道它应该如何编写,或者为什么它不能工作?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-03 12:24:02

您可以为WhereIf创建/使用扩展方法

给定一个布尔条件,追加一个Where子句。

代码语言:javascript
代码运行次数:0
复制
 var foo = db.Customers.WhereIf(startDate.HasValue, 
                                   x => startDate <= x.DateDestroyed)
                       .WhereIf(endDate.HasValue,  
                                   x => x.DateDestroyed <= endDate );

更多细节请访问WhereIf at ExtensionMethod.net。你可以在那里找到IEnumerable<T>IQueryable<T>的代码。

票数 0
EN

Stack Overflow用户

发布于 2010-09-08 08:41:09

我的代码需要IQueryable,所以我在ExtensionMethod.net@p.campbell的工作进行了如下修改:

代码语言:javascript
代码运行次数:0
复制
public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, bool> predicate)
{
    return condition ? source.Where(predicate).AsQueryable() : source;
}

public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, int, bool> predicate)
{
    return condition ? source.Where(predicate).AsQueryable() : source;
}
票数 1
EN

Stack Overflow用户

发布于 2010-09-03 12:14:55

假设您有一个名为"query“的变量,它存储了linq语句的开头部分。尝试这样动态构造where子句:

代码语言:javascript
代码运行次数:0
复制
if (startDate.HasValue) {
    query = query.Where(x => x.DateDestroyed >= startDate);
}
if (endDate.HasValue) {
    query = query.Where(x => x.DateDestroyed <= endDate);
}

LINQ在延迟执行时工作,因此WHERE子句将在代码执行时正确解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3632971

复制
相关文章

相似问题

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