2016-06-20 8 views
3

LINQ to SQLステートメントを実行すると、次のエラーが発生します。マテリアライズド 'System.String'タイプから 'System.Guid 'タイプは無効です。LINQ where句は、比較にGUIDのみが含まれていてもstringからGuidにキャスト例外をスローします

例外は、この行で発生:

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

GuidfileDataSyncIdsタイプIList<Guid>あります。

エラーがどこから来ているのかわからないので、文字列はありません。

これはコードです:

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

'DocumentDatas'テーブル定義の' FileDataSyncId'の型をチェックし、 'String' /' varchar(...) 'ではなく' Guid'/'uniqueidentifier'であることを確認してください。 – dasblinkenlight

+0

@dasblinkenlight良いキャッチ。テーブルの 'nvarchar(max)'から 'uniqueidentifier'に更新されていませんでした。それを答えに変えれば、それは正しいとマークします。 – Legion

答えて

1

問題はDocumentDatasテーブルのFileDataSyncIdフィールドのマッピングで最も可能性が高いです。 Containsを成功させるには、データベースのフィールドがuniqueidentifierで、.NET側のフィールドがGuidである必要があります。エラーメッセージには、.NET側でフィールドがStringと表示され、問題が発生していることが示唆されています。

関連する問題