LINQ查询在Visual Studio中比LINQPad长1600倍

时间:2016-01-20 14:30:04

标签: c# linq

我正在为ASP MVC中的搜索框构建查询。查询在LINQPad中需要10毫秒,在Visual Studio中需要16秒。有什么方法可以改进查询的查询或时间响应吗?

 var queryOracle = (from TS in dbOracle.BI_TYPE_SERVICE
                           join MS in dbOracle.BI_MTR_SRV on TS.BI_ACCT equals MS.BI_ACCT
                           join SL in dbOracle.BI_SRV_LOC on MS.BI_SRV_LOC_NBR equals SL.BI_SRV_LOC_NBR
                           join C in dbOracle.BI_CONSUMER on TS.BI_ACCT equals C.BI_ACCT
                           join P in dbOracle.BI_PERSONAL on C.BI_CUST_NBR equals P.BI_CUST_NBR
                           join STR in dbOracle.BI_SRV_STAT_REF on TS.BI_SRV_STAT_CD equals STR.BI_SRV_STAT_CD
                           where P.BI_ADDR_TYPE != "2B" || P.BI_ADDR_TYPE != "2D" || P.BI_ADDR_TYPE != "FO" || P.BI_ADDR_TYPE != "CC" || P.BI_ADDR_TYPE != "8" || P.BI_ADDR_TYPE != "SE" || P.BI_ADDR_TYPE != "9" || P.BI_ADDR_TYPE != "BD" || P.BI_ADDR_TYPE != "CN" || P.BI_ADDR_TYPE != "CR" || P.BI_ADDR_TYPE != "CS" || P.BI_ADDR_TYPE != "M1" || P.BI_ADDR_TYPE != "M2" || P.BI_ADDR_TYPE != "M3" || P.BI_ADDR_TYPE != "MR"
                           where P.BI_ACCT == 0
                           where P.BI_FORMAT_NAME.StartsWith(term) || SL.BI_ADDR1.StartsWith(term) || MS.BI_MTR_NBR.StartsWith(term) || TS.BI_ACCT.ToString().StartsWith(term)


                           select new
                           {
                               LocationID = SL.BI_SRV_MAP_LOC,
                               MeterNumber = MS.BI_MTR_NBR,
                               AccountNumber = TS.BI_ACCT,
                               ServiceStatCD = TS.BI_SRV_STAT_CD,
                               ServiceStatus = STR.BI_SRV_STAT_DESC,
                               Name = P.BI_FORMAT_NAME,
                               ServiceAddr = SL.BI_ADDR1,
                               ServiceCity = SL.BI_CITY,
                               CustomerNumber = C.BI_CUST_NBR,
                               ServiceCNTY = SL.BI_CNTY_CD,
                               ServiceTOWN = SL.BI_TOWN_CD,
                               HomeAreaCode = P.BI_HOME_AREA_CD,
                               HomePhone = P.BI_HOME_PHN,
                               BusAreaCode = P.BI_BUS_AREA_CD,
                               BusPhone = P.BI_BUS_PHN,
                               MobileAreaCode = P.BI_MOBL_AREA_CD,
                               MobilePhone = P.BI_MOBL_PHN
                           }).AsNoTracking().Take(12).ToList();

2 个答案:

答案 0 :(得分:0)

我有同样的问题,并想知道为什么。在我的例子中,代码中有一个断点,当在VS环境中运行时,它会减慢整个事情。

因此,禁用VS中查询中使用的断点,它应该更快。

答案 1 :(得分:-3)

第一个问题:为什么不使用单独的功能?

我建议你这样做 Parallel.ForParallel.ForEach

我肯定不会在主线程中运行它。

我建议使用:

Task.Factory.StartNew()

知道除了该查询之外使用的代码是很重要的。

可能不是查询本身需要时间。

祝你好运