gpt4 book ai didi

c# - 绕过 Linq To Entities 中缺少 'Contains'

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:17 26 4
gpt4 key购买 nike

我有以下功能(如果重要的话,它托管在 WCF 服务中):

    public List<IceVsRepositoryFile> GetRepositoryFilesByRepositoryId(int repId)
{
var entity = new IceVSEntities();
var files = from p in entity.Files where p.RepositoryId == repId select p.FileId;
List<long> iList = files.ToList();
var repFiles = from p in entity.RepositoryFiles where iList.Contains(p.FileId) select p;

if (!repFiles.Any())
return null;

var retFiles = repFiles.ToList().Select(z => new IceVsRepositoryFile
{
FileId = (int)z.FileId,
RollbackFileId = (int)z.RollbackFileId,
UserId = (int)z.UserId,
FileContents = z.FileContents,
ChangeDescription = z.ChangeDescription
}).ToList();

return retFiles;
}

当我运行此函数时,我收到以下错误消息“LINQ to Entities 无法识别‘Boolean Contains(Int64)’方法,并且无法将此方法转换为存储表达式。

我明白为什么我会收到错误消息。我的问题是,如何重写我的查询以使它按预期工作?我的后端数据库,如果重要的话,如果是 SqlLite 3。我正在使用 .NET 3.5。

最佳答案

你使用的contains是针对List的,它不在IEnumerable中,所以无法转换为对应的sql查询。相反,您可以使用 Any,...例如:

iList.Any(x=>x == p.FileId) (or use related property)

也不是做:

List<long> iList = files.ToList();

在您的查询中使用 files.Any... 以防止从数据库中获取过多数据。实际上使用 IEnumerable 函数而不是 List 函数。

关于c# - 绕过 Linq To Entities 中缺少 'Contains',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com