1

linq에서 특정 클래스의 모든 속성을 가져올 수 있고 linq에서 'where'및 'select'에 대한 표현식 트리를 작성하기에 충분한 동적이어야하는 linq query를 만들고 싶습니다.linq 쿼리를 동적 쿼리로 변환하는 방법은 무엇입니까?

bool 속성과 숫자 속성으로 구성된 도메인 모델이 있습니다. 범위에는 숫자 속성이 사용됩니다.

예 :

도메인 모델

public class MakeMeReal 
    { 
     public bool isA { get; set; } 
     public bool isB { get; set; } 

     public int Type1 { get; set; } 
     public double Type2 { get; set; } 

     public double Type3 { get; set; } 
     public string Type4 { get; set; } 

    } 

입력 모델 :

public class LinqDynamic 
    { 
     public bool isA { get; set; } 
     public bool isB { get; set; } 

     public int lowerRangeForTyp1 { get; set; } 
     public int UpperRangeForTyp1 { get; set; } 

     public double LowerRangeForType2 { get; set; } 
     public double UpperRangeForType2 { get; set; } 
    } 

간단한 쿼리 : 나는 도메인 모델을 통해 이동합니다 쿼리를 작성하려는

public void query(LinqDynamic dynamicInput) 
     { 
      SampleDbContext db = new SampleDbContext(); 

      var result = from m in db.MakeMeReal 
         where m.isB == dynamicInput.isB && m.isA == dynamicInput.isA && 
           m.Type1 >= dynamicInput.lowerRangeForTyp1 && m.Type1 < dynamicInput.UpperRangeForTyp1 && 
           m.Type2 >= dynamicInput.LowerRangeForType2 && m.Type1 < dynamicInput.UpperRangeForType2 

         select new { a = m.Type1, b = m.Type2, c = m.Type3, d = m.Type4 }; 

     } 

그리고 나 표현 트리를 만들지 않을 것이고 런타임에 입력 매개 변수로 'LinqDynamic'클래스를 사용하여 제공 될 입력에 대해 실행될 것입니다.

저는 10 개 이상의 부울 및 30 개의 범위 선택기가 있으며, 부울 및 범위 선택기의 수는 프로젝트 요구 사항에 따라 계속 변경되므로 매번 쿼리를 변경해야합니다. 이

내가 약 https://msdn.microsoft.com/en-us/library/bb397951.aspx 읽어 변경 및 I 인해 명성 포인트의 부족으로 여기에 게시 할 수 없습니다 다른 링크 불가지론 수 있습니다 그래서 나는 그것이 동적 있도록

아직 싶습니다 I 달성 방법을 모르겠다.

답변

0

쿼리에 술어를 사용하는 것이 도움이 될 수 있습니다. NuGet 패키지를 통해 도움을받을 수 있습니다. 문서에서이를 수행하는 방법을 설명합니다. LINQKit here

을 참조하십시오.
관련 문제