2016-09-20 2 views
2

전자 메일을 사용하여 필터링하여 combobox에 전자 메일을 표시하려고합니다. 내 문제는 내 데이터가 사용자 테이블에서 암호화된다는 것입니다. LINQ to Entities가 'System.String Decrypt (System.String, System.String)'메서드를 인식하지 못합니다.

LINQ to Entities does not recognize the method 'System.String Decrypt(System.String, System.String)' method, and this method cannot be translated into a store expression

가 어떻게이 오류를 해결할 수

:

나는이 오류를주고 그것을 해독하려고 할 때? 여기

내 코드는 말에 엔티티 질의에 Linq에 기억

public IEnumerable<Lookup> getUser(string fText) 
      { 
       var ret = new List<Lookup> 
           { 
            new Lookup 
             { 
              boundvalue = 0, 
              boundtext = "" 
             } 
           }; 
       if (!string.IsNullOrEmpty(fText)) 
       { 
        ret.AddRange(_entities.Users.Where(x =>EncDec.Decrypt(x.UserVar01.Trim().Replace("_",string.Empty), 
        Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)).Contains(fText.Trim())) 
           .Select(select => new Lookup 
           { 
            boundvalue = select.UserID, 
            boundtext = EncDec.Decrypt(select.UserVar01.Trim().Replace("_", string.Empty), 
            Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)), 
           })); 

       } 
       return ret; 
      } 
+0

'String.Encrypt'와'String.Decrypt'를 사용하지 않았습니다. 그러나 *'x.UserVar01'을 해독하는 대신 쿼리 전에 * fText를 암호화하는 것은 어떨까요? –

답변

0

Linq에 스위치를 만들기 위해 그 사용 AsEnumerable 확장 메서드를 수행합니다. 나는 이제 작동 ToList()

ret.AddRange(_entities.Users.ToList().Where(x =>EncDec.Decrypt(x.UserVar01.Trim().Replace("_",string.Empty), 
        Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)).Contains(fText.Trim())) 
           .Select(select => new Lookup 
           { 
            boundvalue = select.UserID, 
            boundtext = EncDec.Decrypt(select.UserVar01.Trim().Replace("_", string.Empty), 
            Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)), 
           })); 

포함한다고 가정했다.

+2

귀하는 표 사용자의 ** 전체 내용 **을 실현하고 있습니다. 행의 크기가 작은 경우에만이 작업을 수행해야합니다. 최적화는 필요한 열만 선택하는 것입니다. – Maarten

2

를 필터링 할 수 있습니다 내 조회 클래스

다음
public class Lookup 
    { 
     public long boundvalue { get; set; } 
     public string boundtext { get; set; } 
    } 

입니다 SQL 표기하지만, 무엇에 번역 그 번역을 할 당시에는 System.String Decrypt이 지원되지 않는다고 말하는 오류가 있습니다. 그래서 나는 서버 측에서 필터를 적용 할 수 없다는 것을 기억합니다. 메모리에서 필터를 적용해야합니다. 나는 그것이 조금 문제가 있었다 해결책을 얻기 위해 관리 한 객체

ret.AddRange(_entities.Users.AsEnumerable().Where(x =>EncDec.Decrypt(x.UserVar01.Trim().Replace("_",string.Empty), 
       Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)).Contains(fText.Trim())) 
          .Select(select => new Lookup 
          { 
           boundvalue = select.UserID, 
           boundtext = EncDec.Decrypt(select.UserVar01.Trim().Replace("_", string.Empty), 
           Enums.EncDecSecKeyToString(Enums.EncDecSecKey.Email)), 
          })); 
+1

암호화 된 컨텐트 외부에 일부 필터링을 추가하는 것이 좋습니다. 그러면 모든 레코드를 작성된대로 다시 가져올 필요가 없습니다. 그러나 이것은 게시 된 필터링을 기반으로하므로 대답을 노크하지 않으므로 참고 만하면 해독하지 않고 필터링 할 수 있도록 무언가를 추가해야합니다. – Tim

관련 문제