2015-08-22 21 views
6

Przyjrzałem się różnej odpowiedzi na pytanie o stackoverflow, ale nie widzę sposobu na naprawienie połączenia z linq.Zapytanie typu Linq Wnioskowanie nie powiodło się w wywołaniu połączenia

2 stoły

var query = from tips in TblTips 
      where tips.Id == 30 
      join files in TblFiles on tips.Id equals files.Group 
      select new { tips, files }; 

Błąd:

Type inference failed in the call to Join 

Teraz tips.Id jest int podczas files.Group jest varchar

Próbowałem zrobić .Value

tips.id.Value  --> the word Value not working (most recent linqpad) 

(int)files.Group --> it doesn't like that ... 

Odpowiedz

6

Problem polega na tym, że nie możesz ot dołącz kolumny tabeli wartości tego samego typu!

Convert.ToInt32(column) should work in linqpad and your c# application just fine. 

(I zawinięte w parens i dodał ToList())

To powinno działać dla Ciebie, jeśli grupa jest łańcuch i id int

var query = (from tips in TblTips 
      where tips.Id == 30 
      join files in TblFiles on tips.Id equals Convert.ToInt32(files.Group) 
      select new { tips, files }).ToList(); 

UPDATE:

za OP, zgadzam się z nim, że powinien przekonwertować inną wartość na ciąg znaków

var query = (from tips in TblTips 
      where tips.Id == 30 
      join files in TblFiles on tips.Id.ToString() equals files.Group 
      select new { tips, files }).ToList(); 
+1

Myślę, że byłoby bezpieczniej zrobić '' tips.Id.ToString() równa się files.Group'', jeśli '' files.Group'' może być czymś innym niż liczba całkowita. – kmc059000

+0

OK, to działa, próbowałem zrobić Int32.Parse i to dało mi inny błąd. dzięki! –