0

我正在使用带有存储库模式的 EF 4,它具有如下所示的通用查询方法:

public IEnumerable<T> Query(Expression<Func<T, bool>> filter) 
    { 
        return objectSet.Where(filter); 
    } 

我知道我可以像这样选择一个完整的对象:

context.PeriodRepository.Query(a => a.EntityId == selectedEntityId); 

但我想传递一个返回它的 Linq 查询,type而不是IEnumerable<type>使用 LINQ 表达式而不更改方法。请告诉我该怎么做。

4

2 回答 2

3

使用First()orFirstOrDefault()方法并传入一个谓词来查找您想要的元素(如果它不是第一个元素)。

于 2012-09-03T02:18:47.730 回答
1

查询描述了对列表执行的操作;您必须执行查询才能获得结果。

使用.ToList()/.ToArray()将返回与查询匹配的所有项目。用于.First()获取第一个匹配.FirstOrDefault()的项目或获取第一个项目或不匹配的默认值。

类的默认值为null

我认为你的代码应该是这样的:

var myMatch = context.PeriodRepository
   .Query(a => a.EntityId == selectedEntityId)
   .First();

另请注意,First()当没有匹配时会抛出异常。

于 2012-09-03T02:28:52.097 回答