문제

확장 방법을 추가 할 수 있습니까? 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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top