4
我有一個問題。我正在使用Linq和IQueryable接口來處理我的數據庫。 這是我的代碼:IQueryable命令超時
public static List<Stat> GetStateList(DataClassesDataContext db, int pageNumber,
int pageSize, DateTime beginTime, DateTime endTime,
Dictionary<GetSourcesNameResult, bool> sourceDictionary,
bool[] WarnLevel, ref int count)
{
IQueryable<Stat> result = db.Stats;
result = DateFilter(result, beginTime, endTime);
result = DictionaryFilter(result, sourceDictionary);
result = ErrorFilter(result, WarnLevel);
result = result.OrderBy(a => a.EventTime); //sort by eventTime
count = result.Count();
var resultList = result.Skip((pageNumber - 1) * pageSize)
.Take(pageSize).ToList();
return new List<Stat>(resultList);
}
我的數據庫中大量的元素。如果我的過濾器給我約100萬個元素。我有超時異常在這:
count = result.Count();
我需要做什麼呢? SQL表達式:
SELECT [t0].[RecordId], [t0].[RecordTime], [t0].[EventGUID],
[t0].[AssociatedEventGUID], [t0].[EventId], [t0].[EventTime],
[t0].[WarnLevel], [t0].[UserType], [t0].[SourceId],
[t0].[FactoryNumber], [t0].[CntrlId], [t0].[CntrlFactoryNumber],
[t0].[ParamData], [t0].[TargetId], [t0].[SourceName], [t0].[TargetName]
FROM
[dbo].[Log] AS [t0]
WHERE
((CONVERT(Int,[t0].[WarnLevel])) IN (@p0, @p1, @p2)) AND
([t0].[SourceName] IN (@p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12,
@p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21, @p22, @p23, @p24,
@p25, @p26, @p27, @p28, @p29, @p30, @p31, @p32, @p33, @p34, @p35, @p36,
@p37, @p38, @p39, @p40, @p41, @p42, @p43, @p44, @p45, @p46, @p47, @p48,
@p49, @p50, @p51, @p52, @p53, @p54, @p55, @p56, @p57, @p58, @p59, @p60,
@p61, @p62, @p63, @p64, @p65, @p66, @p67, @p68, @p69, @p70, @p71, @p72,
@p73, @p74, @p75, @p76, @p77, @p78, @p79, @p80, @p81, @p82, @p83, @p84,
@p85, @p86, @p87, @p88, @p89, @p90, @p91, @p92, @p93, @p94, @p95, @p96,
@p97, @p98, @p99, @p100, @p101, @p102, @p103, @p104, @p105, @p106, @p107,
@p108, @p109, @p110, @p111, @p112, @p113, @p114, @p115, @p116, @p117,
@p118, @p119, @p120, @p121, @p122, @p123, @p124, @p125, @p126, @p127,
@p128, @p129, @p130, @p131, @p132, @p133, @p134, @p135, @p136, @p137,
@p138, @p139, @p140, @p141, @p142, @p143, @p144, @p145, @p146, @p147,
@p148, @p149, @p150, @p151, @p152, @p153, @p154, @p155, @p156, @p157,
@p158, @p159, @p160, @p161, @p162, @p163, @p164, @p165, @p166, @p167,
@p168, @p169, @p170, @p171, @p172, @p173, @p174, @p175, @p176, @p177,
@p178, @p179, @p180, @p181, @p182, @p183, @p184, @p185, @p186, @p187,
@p188, @p189, @p190, @p191, @p192, @p193, @p194, @p195, @p196, @p197,
@p198, @p199, @p200, @p201, @p202, @p203, @p204, @p205, @p206, @p207,
@p208, @p209, @p210, @p211, @p212, @p213, @p214, @p215, @p216))
AND ([t0].[EventTime] >= @p217) AND ([t0].[EventTime] <= @p218)
ORDER BY [t0].[EventTime]
您應該看看linq語句生成的SQL。 – Magnus 2013-04-11 11:12:47
@Magnus:增加了sql命令。 – EXTRAM 2013-04-11 11:23:25
我懷疑'count'查詢會產生這種情況,但無論如何,您應該運行查詢並檢查執行計劃。也許你需要一些表格的索引。 – Magnus 2013-04-11 12:01:48