使用 LINQ Select 和 Lambda 避免 2100 rpc 限制
Posted
技术标签:
【中文标题】使用 LINQ Select 和 Lambda 避免 2100 rpc 限制【英文标题】:Avoiding the 2100 rpc limit with LINQ Select and Lambda 【发布时间】:2013-10-08 10:30:33 【问题描述】:我有以下问题。在其中,我正在执行 Take(2100) 以避免施加 2100 rpc 限制。
var query =
from result in staging_sparc_sophis_trade.AsQueryable()
where deals.Take(2100).Contains(result.TRADE_ID)
select new traded_product()
Deal = result.TRADE_ID,
CostCentre = result.FTP_COSTCTR,
InvolvedPartyId = R_GEN_002(result.hsbc_source_system_instance, "", result.CNPTY_ACRONYM
;
我想知道的是,有没有一种方法可以删除 Take(2100) 部分并将其替换为 Deal 行中的 lambda 语句,以检查交易是否在我正在搜索的列表(交易)中为了?
【问题讨论】:
hitting the 2100 parameter limit (sql-server) when using Contains() 的可能重复项 @MikaelÖstberg 是的,我正在考虑做一个循环并在最后加入所有结果。但我不确定是否有优雅的 Lambda 解决方案。不要想。 我们为 mssql 使用了参数化数据表。它可能不是完美的解决方案,但应该可以解决问题。 【参考方案1】:我找到了解决问题的两种方法。 解决方案1.如果我直接在SqlServer物理机上运行查询,不会出现问题。
在下一部分进行过滤: 去掉“Where子句”
var query =
from result in staging_sparc_sophis_trade.AsQueryable()
--where deals.Take(2100).Contains(result.TRADE_ID)
select new traded_product()
Deal = result.TRADE_ID,
CostCentre = result.FTP_COSTCTR,
InvolvedPartyId = R_GEN_002(result.hsbc_source_system_instance, "", result.CNPTY_ACRONYM
;
在这部分代码中添加过滤部分。它运行得有点慢,但仍然有效。我认为它运行速度较慢,因为我在每次迭代中都在搜索完整列表。
foreach (var result in query)
if (!deals.contains(result.TRADE_ID))
--Actions
【讨论】:
以上是关于使用 LINQ Select 和 Lambda 避免 2100 rpc 限制的主要内容,如果未能解决你的问题,请参考以下文章