(llblgen) linq 쿼리를 문자열로 동적으로 쿼리하십시오
-
05-07-2019 - |
문제
코딩 중에 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에 있습니다.