2015-03-09 18 views
5

Tôi đang sử dụng LINQ to Entity và nhận được lỗiPhương pháp không thể được dịch sang một lỗi cú pháp lưu trữ biểu

Phương pháp không thể được dịch sang một biểu hiện cửa hàng

var myStrings = from keys in keyTable 
             join values in valuesTable 
              on keys.ID equals values.FK_TableKey 
             select new NewModel 
             { 
              Value = values.Value,           
              Hash = CalculateHash(string.Format("{0}_{1}", keys.Key, keys.Context)) 
             }; 

// Tôi cố gắng để chuyển đổi thành cú pháp LINQ như bên dưới

// Cách tính giá trị Hash sẽ hoạt động trên LINQ to Entity?

// Method

public string CalculateHash(string input) 
     { 
      if (input == null) 
       return null; 
//calculate MD5 hash 
      var md5 = System.Security.Cryptography.MD5.Create(); 
      byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input); 
      byte[] hash = md5.ComputeHash(inputBytes); 

      var sb = new StringBuilder(); 
      foreach (byte t in hash) 
       sb.Append(t.ToString("P2")); 

      return sb.ToString(); 
     } 
+1

Đây không phải là có thể bạn sẽ phải gọi ToList() trước khi tính toán băm. –

+0

@JenishRabadiya là như nhau được hiển thị trong câu trả lời dưới đây? xin hãy giải thích ? – Neo

Trả lời

8

Kể từ khi giá trị băm nên được tính toán ở phía bên .NET, bạn có thể thêm AsEnumerable() cuộc gọi sau khi phần nào tạo ra "dữ liệu thô", và sau đó tính toán phần còn lại bên ngoài RDBMS của bạn, như thế này:

var rawStrings = from keys in keyTable 
       join values in valuesTable 
       on keys.ID equals values.FK_TableKey 
       select new { 
        Value = values.Value,           
        keys.Key, 
        keys.Context 
       }; 
var myStrings = rawStrings.AsEnumerable().Select(t => new NewModel { 
    Value = t.Value, 
    Hash = CalculateHash(string.Format("{0}_{1}", t.Key, t.Context)) 
}); 

truy vấn đầu tiên chạy trên phía RDBMS, và tạo ra chìa khóa và bối cảnh để tính Hash. Truy vấn thứ hai sử dụng dữ liệu thô để tính toán kết quả mong muốn.

+0

'Giá trị' không tồn tại trong ngữ cảnh hiện tại trong' myStrings': ( – Neo

+0

aha của tôi xin lỗi và cảm ơn nhưng một câu hỏi nữa về mô hình của tôi? Như tôi đã cố gắng ràng buộc các giá trị 'NewModel' vì tôi đã lấy lớp mô hình này và các tài sản đang có bên này – Neo

+0

tôi đã cố gắng mô hình đưa ra sau khi mới nhưng nhận được lỗi:. 'chuỗi 'a.Value, khởi tạo không hợp lệ thành viên decelerator ' – Neo

Các vấn đề liên quan