2015-03-09 27 views
5

używam LINQ do jednostki i uzyskiwanie błądmetoda nie może być tłumaczone na błąd składni sklep ekspresji

Metoda nie można przełożyć na wyrażenie sklepu

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)) 
             }; 

// próbowałem do konwersji w składnię LINQ, jak poniżej:

// Jak obliczyć wartość skrótu, która będzie działać na LINQ do jednostki?

// Metoda

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

Nie jest to możliwe, musisz wywołać ToList() przed obliczeniem hasza. –

+0

@JenishRabadiya jest to samo pokazano w odpowiedzi poniżej? proszę rozwinąć? – Neo

Odpowiedz

8

Ponieważ wartość hash powinny być obliczane na stronie .NET, można dodać AsEnumerable() połączenia po części, która produkuje „surowe dane”, a następnie obliczyć resztę zewnątrz Twój RDBMS, tak:

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)) 
}); 

pierwszy kwerenda działa na stronie RDBMS i tworzy klucz i kontekst dla obliczania Hash. Drugie zapytanie wykorzystuje surowe dane do obliczenia pożądanego wyniku.

+0

'Wartość' nie istnieje w bieżącym kontekście w' myStrings' :( – Neo

+0

aha moje złe przepraszam i dziękuję ale jeszcze jedno pytanie co z moim modelem? Jak w pytaniu próbowałem powiązać wartości 'NewModel' ponieważ wziąłem ten model klasy i właściwości są tam wewnątrz. – Neo

+0

Próbowałem dany model po nowym, ale otrzymujący błąd: 'ciąg 'a.Value, nieprawidłowy element zwalniacza inicjatora' – Neo