C# 二元分期表。使用75K扩展IN子句的限制。TVP会产生有利于少量数据的执行计划,这就是为什么我说他可以尝试morelinq库。我以前在更大的表中尝试过它,它的性能非常好。@PanagiotisKanavos令人惊讶的是,类似的查询(如果使用List而不是L
C# 二元分期表。使用75K扩展IN子句的限制。TVP会产生有利于少量数据的执行计划,这就是为什么我说他可以尝试morelinq库。我以前在更大的表中尝试过它,它的性能非常好。@PanagiotisKanavos令人惊讶的是,类似的查询(如果使用List而不是L,c#,sql,asp.net,entity-framework,linq,C#,Sql,Asp.net,Entity Framework,Linq,二元分期表。使用75K扩展IN子句的限制。TVP会产生有利于少量数据的执行计划,这就是为什么我说他可以尝试morelinq库。我以前在更大的表中尝试过它,它的性能非常好。@PanagiotisKanavos令人惊讶的是,类似的查询(如果使用List而不是List)至少在最新的EF版本中可以工作,并且将使用巨人UNION ALL子句(而不是in)生成内部联接。这是关于数据库查询的问题。如果两组ID都存在于同一个数据库中,那么就没有理由将ID拉到客户端,只是为了将它们发送回服务器。如果ID只存在于客
二元分期表。使用75K扩展IN子句的限制。TVP会产生有利于少量数据的执行计划,这就是为什么我说他可以尝试morelinq库。我以前在更大的表中尝试过它,它的性能非常好。@PanagiotisKanavos令人惊讶的是,类似的查询(如果使用
List
而不是List
)至少在最新的EF版本中可以工作,并且将使用巨人UNION ALL子句(而不是in)生成内部联接。这是关于数据库查询的问题。如果两组ID都存在于同一个数据库中,那么就没有理由将ID拉到客户端,只是为了将它们发送回服务器。如果ID只存在于客户端(如带有ID的文件),LINQ无法通过魔法使客户端ID出现在服务器上。如果该查询能够工作,它将必须在()中创建一个巨大的IN
子句或使用TVPs<在中,code>有一个限制,因此它可能不起作用。他说“两个表都在不同的服务器中”。在这种情况下,asnwer链接到不同的服务器。或临时暂存表。使用75K扩展IN子句的限制。TVP会产生有利于少量数据的执行计划,这就是为什么我说他可以尝试morelinq库。我以前在更大的表中尝试过它,它的性能非常好。@PanagiotisKanavos令人惊讶的是,类似的查询(如果使用List
而不是List
)至少在最新的EF版本中可以工作,并且将使用巨人UNION ALL子句(而不是in)生成内部联接.有没有确认OP正在使用SqlServer?@IvanStoev没有,我只是有这样的不满。但如果情况并非如此,我将要么更新OPs数据库的答案,要么将其删除(如果该数据库是我不知道如何做的话)。是否有任何证据表明OP正在使用SqlServer?@IvanStoev不是真的,我只是有过这样的不满。但如果情况并非如此,我将要么更新OPs数据库的答案,要么删除它,如果这将是一个数据库,我不知道如何做到这一点。
foreach(var item in cotext1.Table1)
{
var Employee=Context2.table2.where(x=>x.EmpId==item.Id);
}
Server1Entities dc1 = new Server1Entities ();
List<IDTable> ids = (from ro in dc1.IDTable select ro).ToList();
Server2Entities dc2 = new Server2Entities();
var list = (from firstTable in ids
join secondTable in dc.YourSecondTable
on firstTable.ID equals secondTable.ID
select new {
field1 = firstTable.Field1,
field2 = secondTableField1 // You can define fieldnames as you want.
}).ToList();
CREATE TYPE dbo.IntHashSet AS TABLE
(
ID int NOT NULL PRIMARY KEY
)
using (var ctx = new TestDBEntities()) {
// fill data table with your ids
var dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
for (int i = 0; i < 75000; i++) {
dt.Rows.Add(i);
}
// make a query
var result = ctx.Database.SqlQuery<BigTable>("select BT.* from BigTable BT inner join @IDS I on BT.CodeID = I.ID",
new SqlParameter("IDS", SqlDbType.Structured)
{
// name of type you created in step 1
TypeName = "dbo.IntHashSet",
Value = dt
}).ToArray();
}