0

我已经设置了一个与 dblinq 一起使用的数据库。

CREATE TABLE 'quotes' (                                                                                                      
      'DBDate' int(8) unsigned NOT NULL,                                                                                         
      'TickerID' int(11) unsigned NOT NULL,                                                                                      
      'Open' double(12,4) NOT NULL,                                                                                              
      'High' double(12,4) DEFAULT NULL,                                                                                          
      'Low' double(12,4) DEFAULT NULL,                                                                                           
      'Close' double(12,4) DEFAULT NULL,                                                                                         
      'AdjClose' double(12,4) DEFAULT NULL,                                                                                      
      'Volume' int(11) unsigned NOT NULL,                                                                                        
      PRIMARY KEY ('TickerID','DBDate'),                                                                                         
      CONSTRAINT 'quotes_ibfk_1' FOREIGN KEY ('TickerID') REFERENCES 'tickers' ('TickerID') ON DELETE CASCADE ON UPDATE CASCADE  
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC             

以上是mysql表调度 MySQL服务器在不同的机器上。当我在我的测试机器上运行这个 mysql 查询时(所以与服务器不同的机器)

SELECT a.*, b.* FROM quotes a INNER JOIN quotes b ON a.DBDate = b.DBDate AND a.TickerID=956 and b.TickerID=957 order by a.dbdate asc;

我会得到预期的输出:2934 行集合(0.03 秒)

但是当我想在我的 C# 环境中使用 DBLinq 获得相同的结果时,如下所示:

var tradeAbleA = (from a in _db.Quotes where a.TickerID == 956 select a);
var tradeAbleB = (from a in _db.Quotes where a.TickerID == 957 select a);
var myDataSet = (from a in tradeAbleA.AsEnumerable() join b in tradeAbleB.AsEnumerable() on a.DbdAte equals b.DbdAte orderby a.DbdAte ascending select new { a, b }).ToList();

填写列表需要一秒钟多的时间。这太长了。我怎样才能加快速度?(我需要它在列表中)问候,

马蒂斯

4

1 回答 1

0

您的 Sql 不应该转换为以下 linq 吗?

var myDataSet = (from a in _db.Quotes 
    join b in db.Quotes on a.DbdAte equals a.DbdAte 
    where a.TickerID == 956 && b.TickerID == 957 
    orderby a.DbdAte ascending select new { a, b }).ToList();

在您当前的版本中,您分别为 a 和 b 创建查询,并通过.AsEnumerable()在第三个 linq 表达式中调用它们来强制对它们进行评估。您将结果移动到内存中,然后 Linq to Objects 为您连接(这可能很昂贵)。然后,您订购内存中的剩余项目。

以上应该允许您将所有这些步骤传递给查询提供程序,这往往要快得多

于 2011-07-13T15:43:42.617 回答