gpt4 book ai didi

c# - 有效地加入内存列表

转载 作者:太空狗 更新时间:2023-10-29 20:41:54 27 4
gpt4 key购买 nike

在 EF 中,如果我有一个基元列表 (List),那么将它“加入”到一个表中很容易:

var ids = int[]{1,4,6}; //some random values
var rows = context.SomeTable.Where(r => ids.Contains(r.id))

当您想加入多个列时,这会变得更加复杂:

var keys = something.Select(s => new { s.Field1, s.Field2 })
var rows = context.SomeTable.Where(r => keys.Contains(r => new { s.Field1, s.Field2 })); // this won't work

我找到了两种加入它的方法,但都不是很好:

  1. 吸入整个表格,并根据其他数据对其进行过滤。 (如果表格真的很大,这会变慢)
  2. 对于每个键,查询表(如果要提取的行数相当多,这会变慢)

有时,我能够做出的妥协是修改后的#1:基于相当独特的键拉入表的子集

var keys = something.Select(s => s.Field1)
var rows = context.SomeTable.Where(r => keys.Contains(s.Field1)).ToList();
foreach (var sRow in something)
{
var joinResult = rows.Where(r => r.Field1 == sRow.Field1 && r.Field2 == sRow.Field2);
//do stuff
}

但即使这样也可能会拉回太多数据。

我知道有一些方法可以将表值参数引入 ADO.Net,还有一些方法可以构建一系列 .Where() 子句,这些子句通过 OR 运算在一起。谁有 Elixir ?

最佳答案

如果不使用 .Contains(),您可以使用内部连接和“过滤器”吗?

from s in context.SomeTable
join k in keys on new {k.Field1, k.Field2} equals new {s.Field1, s.Field2}

上面可能有错别字,但你明白了......

关于c# - 有效地加入内存列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676973/

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