【发布时间】:2019-11-10 11:21:52
【问题描述】:
我有一个接收对象列表的 webAPI。目前,这些数据作为数据表对象传递给存储过程,但由于 dataDump 可以保存 1000 条 ResponseAPI 记录,这证明有点慢。
所以,我开始研究使用 EF 来承担负载的概念,使用上下文中的 SaveChanges 一次性推送所有更改。
var dataDump = new List<ResponseAPI>
{
new ResponseAPI
{
Id= "1000",
Code = "C15",
value = "1976"
},
new ResponseAPI
{
Id = "999",
Code = "C14",
value = "1976"
}
};
var step2 = from l in dataDump
join p in Plants on new { X1 = l.Code } equals new { X1 = p.Code }
join ps in PlantTypes on new { X1 = l.Code, X2 = p.Id } equals new { X1 = ps.Code, X2= ps.Id}
where ps.TypeName == "Daisy"
select new {
Code = l.Code,
Id = p.Id
};
据我所知,这段代码正在运行,没有产生任何错误。我试图从 dataDump 中获取当前在 Plants 表中不存在的 Id 列表。
我使用另一种技术取得了一些成功,但只有一个表连接。
var step1 = dataDump.Where(s =>
s.Code.Any(
a => !context.Plants
.Select(x => x.Code)
.Contains(s.Code)))
.Select(s => s.Code)
.Distinct()
.ToList();
第一个 sn-p "step2" 只是在表之间进行基本连接,它有效,但我不知道如何实现 not!在连接上。
第二个sn -p "step1" 有一个not!在上下文中,它只返回 dataDump 中不在 Plants 表中的值。
我的首选方法是第 1 步,但我不知道如何添加链接两个字段的第二个连接。
【问题讨论】:
-
既然您没有从“PlantTypes”表中选择任何值,那么这个连接有什么用呢?也许是为了未来的发展?因为如图所示,我会说只是不要加入第二张桌子......它没有被使用!
-
为什么需要
PlantTypes上的join? (PS 在Plants加入时尝试into pj where !pj.Any())。 (step1中的 PPS,s.Code是一个集合吗?)
标签: c# entity-framework linq linq-to-entities