我有点过于简单化了,因为我正在寻找通用的答案。假设我有一个这样的表设置:
Parent
recno int (unique, pk)
date datetime
stuff varchar(50)
Child
parentrecno (int, fk) --- PK
sequence (int) --- PK
data varchar(50)
在我的 C# 程序中,我经历了很多麻烦才找到我感兴趣的父记录并将它们填充到列表中。 Parent 是一个非常大的表,我宁愿不要对它进行不必要的查询。所以我把钥匙藏了起来:
List<int> recs = (from d in Parent where [.....] select d.recno).ToList();
稍后在 Linq 中我可以说,找到关联父级的所有子记录:
var kids = from k in database.Childs
where recs.Contains(k.parentrecno)
select new { k };
这一切都很棒,直到 recs 包含超过 2100 个条目。然后我收到 TDS RPC 错误(参数太多)。
我认为我可以:
如果我把它分成块,那么我漂亮的 Linq 就根本无法工作:
var kids2 = (from kid in paydb.Childs
where
recs.Contains(kid.parentrecno)
group pay by kid.parentrecno into kgroup
select new { ParentRecNo = kgroup.Key, KidRecords = kgroup })
.ToDictionary(kx => kx.ParentRecNo);
因为列表记录将包含需要组合在一起的内容,但必须为 Linq 查询分开。