如何解决重用where数组
说我需要从各种表格中进行一堆查询
var weights = db.weights.Where(x => ids.Contains(x.ItemId)).Select(x => x.weight).ToList();
var heights = db.heights.Where(x => ids.Contains(x.ItemId)).Select(x => x.height).ToList();
var lengths = db.lengths.Where(x => ids.Contains(x.ItemId)).Select(x => x.length).ToList();
var widths = db.widths.Where( x => ids.Contains(x.ItemId)).Select(x => x.width ).ToList();
好吧,实际上它并不是真的那么愚蠢,而只是为了说明问题。基本上,在此示例中,该数组“ id”被发送到数据库4次。我当时想只发送一次就可以节省一些带宽。有可能这样做吗?有点像
db.SetTempVariable("ids",ids);
var weights = db.weights.Where(x => db.TempVariable["ids"].Contains(x.ItemId)).Select(x => x.weight).ToList();
var heights = db.heights.Where(x => db.TempVariable["ids"].Contains(x.ItemId)).Select(x => x.height).ToList();
var lengths = db.lengths.Where(x => db.TempVariable["ids"].Contains(x.ItemId)).Select(x => x.length).ToList();
var widths = db.widths.Where( x => db.TempVariable["ids"].Contains(x.ItemId)).Select(x => x.width ).ToList();
db.DeleteTempVariable("ids");
我只是在这里想象可能的语法。从本质上讲,SetTempVariable会将数据发送到数据库,而db.TempVariables [“ ids”]就像在表达式中使用的虚拟对象,实际上仅包含对先前发送的数据的引用,然后数据库神奇地理解了这一点并重复使用我发送的ID列表,而不是我一次又一次发送的ID。
那我该怎么办?
解决方法
嗯,这比任何东西都更是一个数据库设计问题。一个经过适当设计的数据库将有一个表,其中包含每个项目的重量,高度,长度和宽度(或称为“ id”),因此对该项目的一个查询可立即返回所有内容。
我不愿意为您正在使用的损坏的数据库设计提供建议的临时解决方法,因为您确实应该对此进行修复,但是如果您首先打开一个事务并运行所有4个操作,则会发现性能有很大的提高。您的查询。或者只是将表连接到id
(它们看起来一样吗?),然后您的查询就变成一个查询。
要回答您的实际问题,然后又在这里树错了树,这就是临时表。您可以将数据上传到临时表,然后将其与其他表连接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。