0

我有以下谓词表达式。

public IQueryable<T> Find(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
    {
        return //boolean
    }

这是我调用该方法的地方:

    public void TestMethod1()
    {
        author.AuthorName = authorName;

        using (var context = new AspBlogRepository<Author>())
        {
            if (context.Find(e => e.AuthorName == authorName))
            {
                //do nothing
            }
            context.Add(author);   
        }
    }

我收到一条错误消息,提示您无法将 IQueryable 转换为布尔值。我只想能够使用我的谓词表达式来查看作者是否已经在数据库中。

任何帮助将非常感激。

谢谢!

4

3 回答 3

1

错误说明了一切。context.Find(e => e.AuthorName == authorName)正在回归IQueryable<T>If期待一个bool

所以你的用法if (context.Find(e => e.AuthorName == authorName))是错误的。将其更改为

if (context.Find(e => e.AuthorName == authorName).Any())
{

}
于 2013-02-17T22:14:02.727 回答
1

context.Find返回一个IQueryable<T>. 您的代码可能看起来像:

if (context.Find(e => e.AuthorName == authorName).Count() == 1)
{
    //do nothing
}
于 2013-02-17T22:15:21.160 回答
1
public IQueryable<T> Find(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
    {
        return //boolean
    }

如果您确实返回布尔值,问题就在这里。如果此方法在您的上下文中,您首先需要解析Author,然后Authors在您的存储库中过滤。

如果这是一个 EF 上下文,并且您可以访问存储库中的 EF 上下文,您应该能够像这样获取数据库集:

var entitySet = context.Set<T>();

然后,您可以针对entitySet返回的过滤结果运行谓词。

于 2013-02-17T22:18:39.553 回答