문제

코딩 중에 100% 알 수없는 LINQ 쿼리를 생성해야합니다 (설계 시간). 이는 모든 데이터 프로젝트에서 100% 분리 된 프레임 워크에서 논리를 사용할 수 있기 때문입니다. 데이터의 경우 LLBLGEN 생성 데이터 액세스 코드를 사용합니다.

일반적으로 DLL에서 호출을 사용하면 프레임 워크 (참조가 아님)에 지정된 DLL을 사용하여 데이터를 검색하는 코드를 만들 수 있습니다. 그러나 이제 우리는 LINQ 에서이 작업을 수행해야합니다. 다음과 같은 쿼리를 어떻게 만들 수 있습니까?

var q = from customer in m.Customer
        select new
        {                   
            customer.Number,
            customer.City,
            customer.CountryEntity.Name             
        };

문자열에서만. 우리는 "고객"이라는 문자열 1 개를 가지므로 고객으로부터 검색해야한다는 것을 알고 있습니다. 그런 다음 검색하려는 필드 이름이 포함 된 문자열 []가 있습니다. 보시 다시피이 열에는 복잡한 유형 (관련 필드)이 포함될 수 있습니다.

특히 llblgen과 함께 모든 조언은 좋을 것입니다!

고마워, 가브

도움이 되었습니까?

해결책

이것이 당신이 찾고있는 것인지 확실하지 않지만 Scott Gu는 그의 블로그에 Dynamic Linq 사용에 대한 게시물을 가지고 있습니다.http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-linq-dynamic-query-library.aspx

필요한 모든 것을 수행하지는 않지만 방해가 될 수 있습니다.

편집하다. Scott Gu가 가진 샘플 코드를 살펴보고 필요한 부분을 수행 할 수 있음을 알았습니다. 예제 (이것은 Scotts 코드입니다) :

Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _
                OrderBy("CompanyName"). _
                Select("New(CompanyName as Name, Phone)")

보시다시피 하단 비트에는 동적 선택이 있습니다.

또한 런타임에 쿼리 할 객체를 동적으로 아는 문제를 해결하려면 다음과 같이 할 수 있습니다.

 Sub query(Of T)(ByVal Myobject As IQueryable(Of T))
    Dim i = Myobject.Select("New(customer.Number)")
 End Sub

그런 다음 데이터베이스에서 이름을 읽은 후에는 다음과 같이 약간의 전환을 할 수 있습니다.

Sub PassIt()
    Dim name = "customer"
    Select Case name
        Case "customer"
            query(m.Customer)
    End Select
End Sub

도움이 되었기를 바랍니다. 메모! 마지막 부분 (통과 방법)을 수행하는 더 나은 방법이 있지만 이른 아침에 그것을 생각하는 것입니다.

죄송합니다. 답은 VB에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top