Where子句作为参数传递给方法不起作用

时间:2014-01-06 23:33:30

标签: c# asp.net linq c#-4.0 linq-to-entities

我能够将作为lambda表达式的where作为参数之一传递给方法。

方法 -

public Collection<SelectionItemByGUID> GetLookupsByCashBookId<T>(Func<T, object> cashbookID) where T : class        
    {
        var items = new Collection<SelectionItemByGUID>();
        var itemsT = All<T>(null)
                .Where(cashbookID);
        items = new Collection<SelectionItemByGUID>(CopyListObjectProperties<SelectionItemByGUID>(itemsT.ToList()));
        return items;
    }

但它不允许我使用where子句并返回错误。这是下面的错误,

错误消息 -

'System.Linq.IQueryable'不包含'Where'的定义和最佳扩展方法重载'System.Linq.ParallelEnumerable.Where(System.Linq.ParallelQuery,System.Func)'有一些无效的参数< / p>

调用方法时,它不会返回任何错误消息,

调用方法 -

GetLookupsByCashBookId<Employee>(x => x.CashbookId == cashBookId);

我是否错误地将where子句传递给方法? 它必须在方法内部进行对话吗?

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

您的Func定义错误,应该是:

Func<T, bool>

你必须从你的Func返回bool。你不能像这样使用All,因为它返回bool结果:

All<T>(null).Where(cashbookID);

首先从某处获取Employee项目集合(可能来自您的数据库上下文),然后您可以使用Where扩展方法。