从数据库中选择并比较两个列表
本文关键字:两个 列表 比较 数据库 选择 | 更新日期: 2023-09-27 18:10:34
我是linq的新手,我正在编写一个我相信可以改进的过程。
简单点:
我得到一个对象列表。
我检查数据库表中哪个对象在数据库中有一行。
我返回一个带有附加布尔值exists/not exists的对象列表。
public class Project
{
public Guid? Id {get; set;}
public string name {get; set;}
}
注意,我并不总是有id,因此我应该跳过这个对象。
(很奇怪,但这只是非常接近我在现实生活中的要求)
这是我的代码-需要改进:
// Get List OF Project Guids
List<Project> ProjectList = GetProjects()
IEnumerable<Guid?> projectsIDs = from package in packages select package.Key;
List<Guid?> prjGuidsList = projectsIDs.ToList();
// Sends the list of Guids and return only the one that exists in the db
// will be implemented with select.. where.. in..
List<Guid?> dbProjects = FilterSharedVersions(prjGuidsList);
// create a new object that will contain the true false value
List<ProjectsToken> tokens = packages.Select(subject => new ProjectsToken
{
Id = subject.id
MetaKey = subject.Name,
exists = dbProjects.contains(subjecy.id)
}
).ToList();
return tokens;
List类的Contains方法在0 (n)中表现很差。您需要构建一个HashSet,然后方法Contains将在0(1)内执行。
var dbProjects = new HashSet<Guid?>(FilterSharedVersions(prjGuidsList));
var tokens = packages.Select(subject => new ProjectsToken
{
Id = subject.id
MetaKey = subject.Name,
exists = dbProjects.Contains(subjecy.id)
}
).ToList();