执行 LINQ to SQL 语句时出现以下错误:从物化“System.String”类型到“System.Guid”类型的指定转换无效。
异常发生在这一行:
IList<DocumentData> dds = hcDbContext.DocumentDatas.Where(d => fileDataSyncIds.Contains(d.FileDataSyncId)).ToList();
d.FileDataSyncId
是 Guid
和 fileDataSyncIds
类型是 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;
最佳答案
问题很可能出在 DocumentDatas
表的 FileDataSyncId
字段的映射中。为了使 Contains
成功,该字段在数据库中必须是 uniqueidentifier
,在 .NET 端必须是 Guid
。错误消息表明 .NET 端将该字段视为 String
,从而导致了问题。
关于c# - LINQ Where 子句抛出从字符串到 Guid 的转换异常,即使比较仅包含 Guid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932552/