2016-06-20 1 views
3

Ich bekomme den folgenden Fehler beim Ausführen einer LINQ to SQL-Anweisung: Die angegebene Umwandlung von einem materialisierten System.String-Typ in die System.Guid 'Typ ist nicht gültig.LINQ Where-Klausel wirft Casting-Ausnahme von Zeichenfolge an Guid, obwohl Vergleich nur Guids

Die Ausnahme tritt auf dieser Linie:

IList<DocumentData> dds = hcDbContext.DocumentDatas.Where(d => fileDataSyncIds.Contains(d.FileDataSyncId)).ToList(); 

d.FileDataSyncId ein Guid und fileDataSyncIds ist IList<Guid> geben.

Es gibt keine Zeichenfolge, so dass ich nicht verstehe, woher der Fehler kommt.

Dies ist der Code:

DocumentData zipFile = new DocumentData(); 
IList<Guid> fileDataSyncIds = hcDbContext.Documents.Where(d => d.EventId == eventId && d.DocumentOwnerTeamId == teamId).Select(d => d.FileDataSyncId).ToList(); 
//Exception on next line 
IList<DocumentData> dds = hcDbContext.DocumentDatas.Where(d => fileDataSyncIds.Contains(d.FileDataSyncId)).ToList(); 
using (var memoryStream = new MemoryStream()) { 
    using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { 

     foreach (var dd in dds) { 
      var docFile = archive.CreateEntry(dd.Filename); 

      using (var entryStream = docFile.Open()) 
      using (var streamWriter = new StreamWriter(entryStream)) { 
       streamWriter.Write(dd.FileData); 
      } 
     } 
    } 
    zipFile.Filename = "Event" + eventId.ToString() + "_Team" + teamId + "_Documents.zip"; 
    zipFile.FileData = memoryStream.ToArray(); 
} 

return zipFile; 
+1

Überprüfen Sie den Typ von 'FileDataSyncId' in' DocumentDatas' Tabellendefinition und stellen Sie sicher, dass es 'Guid' /' uniqueidentifier' ist, nicht 'String' /' varchar (...) '. – dasblinkenlight

+0

@dasblinkenlight Guter Fang. Es wurde nicht von 'nvarchar (max)' zu 'uniqueidentifier' in der Tabelle aktualisiert. Verwandle es in eine Antwort, und ich werde es korrekt markieren. – Legion

Antwort

1

Das Problem ist höchstwahrscheinlich in der Abbildung des FileDataSyncId Feld der DocumentDatas Tabelle. Damit die Contains erfolgreich ausgeführt werden kann, muss das Feld uniqueidentifier in der Datenbank und Guid auf der .NET-Seite sein. Die Fehlermeldung schlägt vor, dass .NET Seite das Feld als String sieht, das Problem verursacht.