如何从IEnumerable <type>转换为type?</type>

时间:2012-09-03 02:09:58

标签: c# .net linq entity-framework

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

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

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

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

但我希望传递一个Linq查询,该查询使用LINQ表达式将其返回为type而不是IEnumerable<type>而不更改方法。请告诉我如何做到这一点。

2 个答案:

答案 0 :(得分:3)

使用First()FirstOrDefault()方法并传入谓词以查找所需的元素(如果它不是第一个)。

答案 1 :(得分:1)

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

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

类的默认值为null

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

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

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