2017-05-17 11 views
0

4 열이있는 테이블을 반환하는 쿼리 가능한 쿼리 슬롯이 있습니다.필터 열 IQueryable C#

ItemName | 국가 A | 국가 B | 국가 C |

내 앱에는 일부 인증 프로세스가 있으며 일부 사용자에게는 특정 국가 열만 표시되어야합니다.

예를 들어 제 국가와 사용자가 = A에만 표시되어야합니다

항목 이름을 | 국가 A |

열의 이름을 기준으로 열을 필터링하는 방법이 있습니까?

IQueryable<AllCountries> ResultsVM = _context.AllCountries; 
      var country = IdentityExtensions.GetCountryId(User);    

      if (country != null) 
      { 
       Type elementType = ResultsVM.ElementType; 
       foreach (PropertyInfo pi in elementType.GetProperties()) 
       { 

         if (country==pi.Name) 
         { 
          ResultsVM= _context.AllCountries 
              .Select(t => new AllCountries 
            {           
             ItemName=t.ItemName, 
             ?? only the column which matches the country 
            }); 
         } 

       } 

      }  

지금까지, 내 ​​된 IQueryable의 열이 사용자의 국가에 해당하는 경우 알고 있지만 내가 그것을 표시하는 방법 내 선택에 알고 다른 사람을 제거하지 마십시오 ...

업데이트

의 목록으로 정의되면, 된 IQueryable를 저장하고 내 MVC 웹 프로젝트에서 내보기에 사용됩니다

내 뷰 모델 ResultsVM :

public class AllCountries 
    {  
     [DisplayName("Item")] 
     public string ItemName { get; set; } 
     public int? Country1 { get; set; } 
     public int? Country2 { get; set; } 
     public int? Country3 { get; set; }   
    } 
Country + '1' 
Country + '2' 
Country + '3' 
Country + '4' 

그런 다음 당신이 만들 수 있습니다는 당신이 그 열이 예에 해당 컬럼의 접미사를 선택하려면 열 이름 접두사 나라와 조건을 고려하면

실뱅

답변

0

감사 동적이처럼 LINQ 쿼리의 선택 :

public class Country 
     { 
      public string Condition { get; set; } 
      public string Country1 { get; set; } 
      public string Country2 { get; set; } 
      public string Country3 { get; set; } 
     } 

public void GetData() 
     { 
      List<Country> liCountry = new List<Country>(); 
      liCountry.Add(new Country { Condition = "1", Country1 = "2", Country2 = "3", Country3 = "4" }); 
      liCountry.Add(new Country { Condition = "2", Country1 = "20", Country2 = "30", Country3 = "40" }); 
      liCountry.Add(new Country { Condition = "3", Country1 = "21", Country2 = "31", Country3 = "41" }); 
      string temp = "2"; 
      var liResult = liCountry.Where(w => w.Condition == temp).Select(s => new {result = s.GetType().GetProperty("Country" + temp).GetValue(s, null) }).ToList(); 

     } 

을 나는 C를 얻을 수 Reflection를 사용한 SELECT 문에 olumn 이름을 동적으로.

+0

감사합니다. 선택 항목에서 일반 '결과'열 이름 대신 정확한 열 이름 (예 : country2)을 포함하는 결과를 반환하려면 어떻게해야합니까? 내 관점에서 매핑을 만드는 것이 중요합니다. – sylvain77

+0

@ sylvain77 님이 당신이 묻는 것을 얻지 못했습니다. 정교하게 말씀해 주시겠습니까? –

+0

예. 나는 내 질문을 업데이트했다. 내 IList resultsVM 내 질문에 정의 된 클래스를 기반으로해야합니다. 귀하의 예를 들어, "목록"내 칼럼의 제목으로 "country2"로 liResult를 갖는 것일 것입니다. 귀하의 예에서는 "결과"가 아닙니다. 내 견해에 따라 이름을 일관되게 유지해야합니다. – sylvain77