c# - LINQ Where 子句抛出从字符串到 Guid 的转换异常,即使比较仅包含 Guid

标签 c# .net linq

执行 LINQ to SQL 语句时出现以下错误:从物化“System.String”类型到“System.Guid”类型的指定转换无效。

异常发生在这一行:

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

d.FileDataSyncIdGuidfileDataSyncIds类型是 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/

相关文章:

c# - 如何减少gridview列asp.net C#中的小数位

c# - Richtextbox 键入时的数据绑定(bind)问题

javascript - 从页面中删除所有 JavaScript

.net - <decimal>.ToString ("P3") 在 Win7 和 Windows 10 上返回不同的结果

c# - IEquatable 对象上的 LINQ.Distinct 不起作用

c# - 如何在 SoapHttpClientProtocol 中设置 User-Agent header ?

c# - 如何参数化 SQL 表而不会受到 SQL 注入(inject)的影响

c# - 如何将 WindowsIdentity 转换为 NetworkCredential?

c# - 如何检查 ObjectQuery<T> 表达式树中是否存在 OrderBy

c# - 检查字符串的语法 - C#