iqueryable 로 이것을 할 수 있습니까?
-
05-07-2019 - |
문제
확장 방법을 추가 할 수 있습니까? IQueryable<T>
그런 다음 linq2sql 또는 ef 또는 nhibernate 또는 linqtoobjects의 경우, 기능을 정의하십시오 / 각 저장소 가이 메소드를 어떤 SQL로 변환하는지 / 어떻게 변환 할 것인가?
예를 들어, 다음을 원한다고 상상해보십시오.-
var result = (from q in db.Categories()
where q.IWishIKnewHowToCode("hi")
select q).ToList();
이제 확장 방법에 대한 코드입니다 IWishIKnewHowToCode()
EF 또는 LinqToObjects 등에 비해 L2S 일 때 다릅니다.
나는 파이프와 필터에 대해 말하는 것이 아닙니다. 나는 그렇게하는 방법을 알고 있습니다.
이것이 L2S라면 그 방법이 linq를 할 것이라고 상상해보십시오. Where
조항이지만 저장소가 .. 말하면 ... LinqToObjects, 그것은 Take(10)
.
이게 가능해?
(나는 그것이 공식적으로 무엇이라고 부르는지 잘 모르겠다 ... 내가하고 싶은 일에 대해)
해결책
그것은 꽤 사악하지만, 내가 생각할 수있는 가장 가까운 것은 제공자를 특별하게하는 것입니다.
public static class Test
{
public static IQueryable<T> IWishIKnewHowToToCode<T>(
this IQueryable<T> data, string something)
// perhaps "where T : SomeBaseTypeOrInterfaceForThePredicate"
{
switch (data.Provider.GetType().Name)
{
case "Foo": return data.Take(10);
case "Bar": return data.Where(somePredicate);
default: return data;
}
}
}
(분명히 전원을 켜는 다른 방법이 있습니다 Type
).
그런 다음 fluent syntax를 통해 사용하십시오 (쿼리 구문이 아님) :
var result = db.Categories().IWishIKnewHowToCode("hi").ToList();
제휴하지 않습니다 StackOverflow