我正在使用带有存储库模式的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>
而不更改方法。请告诉我如何做到这一点。
答案 0 :(得分:3)
使用First()
或FirstOrDefault()
方法并传入谓词以查找所需的元素(如果它不是第一个)。
答案 1 :(得分:1)
查询描述了对列表执行的操作;您必须执行查询才能获得结果。
使用.ToList()
/ .ToArray()
将返回与查询匹配的所有项目。使用.First()
获取匹配的第一个项目或.FirstOrDefault()
获取第一个项目或默认值不匹配。
类的默认值为null
。
我认为你的代码应该是这样的:
var myMatch = context.PeriodRepository
.Query(a => a.EntityId == selectedEntityId)
.First();
另请注意,First()
会在没有匹配时抛出异常。