我有以下查询。在其中我正在做一个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语句,以检查交易是否在列表中(交易)我正在搜索为?
答案 0 :(得分: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
};
在代码的这一部分添加过滤部分。它运行得慢一点,但仍然可以解决问题。我认为它运行速度较慢,因为我在每个单独的itteration中搜索完整列表。
foreach (var result in query)
{
if (!deals.contains(result.TRADE_ID))
{
--Actions
}
}