表达式不适用于 EF4.1

发布于 2024-10-31 22:49:54 字数 826 浏览 1 评论 0原文

有人可以解释为什么以下不起作用吗?: 模型是这样定义的(非常简单的版本)

 public class Monument
{
        [Key]
        public int? MonumentId { get; set; }
        public string Name { get; set; }
}

我的存储库实现中的 Find 方法是这样定义的:

public virtual IQueryable<T> Find(Expression<Func<T, bool>> where)
{
    return _dbset.Where(where);
}

where 参数以这种方式获取值:

 whereClause = c => (   (FilteringRecord.MonumentId <= 0 ? 
true : c.MonumentId == FilteringRecord.MonumentId) 

&& (String.IsNullOrEmpty(FilteringRecord.Name) ? 
true :c.Name.Contains(FilteringRecord.Name))        );

因此,如果 FilteringRecord.MonumentId 的值等于一个数字,我会得到所需的记录,但是如果 FilteringRecord.Name 有一个值,它将被完全忽略!为什么???

在实体框架或 LINQ to SQL 的第一个版本上同样可以正常工作!

提前致谢!!

Is there someone who can please explain why the following is not working??:
the model is defined like this (very simple version)

 public class Monument
{
        [Key]
        public int? MonumentId { get; set; }
        public string Name { get; set; }
}

The Find method in my repository implementation is defined like this:

public virtual IQueryable<T> Find(Expression<Func<T, bool>> where)
{
    return _dbset.Where(where);
}

The where parameter gets a value this way:

 whereClause = c => (   (FilteringRecord.MonumentId <= 0 ? 
true : c.MonumentId == FilteringRecord.MonumentId) 

&& (String.IsNullOrEmpty(FilteringRecord.Name) ? 
true :c.Name.Contains(FilteringRecord.Name))        );

So if the value of FilteringRecord.MonumentId is equal to a number i get the desired record, but if the FilteringRecord.Name has a value it's completely ignored!! Why???

The same works fine on the first version of Entity Framework or LINQ to SQL!!

Thanks in advance!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

朱染 2024-11-07 22:49:54

事实证明,该表达式按预期工作!该错误是由 UI 中的错误绑定引起的(这是一个 WPF 应用程序),为 FilteringRecord 提供了错误的值!

Turns out that the expression is working as expected! The error was caused by a wrong binding in the UI (this is a WPF application), giving wrong values to FilteringRecord!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文