1

这是交易。我有 3 张桌子。

  1. Main(包含 ID 和 SubMain 列表)~ 130 项(第一次过滤后)

  2. SubMain(包含 SubMainID)~ 120 个项目(其中有一个 to m 引用,所以还有另一个表)

  3. MainToSub(包含 ID、MainID 和 SubMainID)~ 500 项

Main 是我的模型,我正在使用它并在 GridView 中显示。有了这个foreach,我搜索其中包含 SearchSubMainID 的每个模型部件。这行得通,但问题是我跳进了 72000 以上,foreach这并没有真正优化

foreach (var item in MainToSub)
{ 
 // 500 Jumps
    foreach (var temp in Main)
    {
        if (item.MainID == temp.ID && item.SubMainID == SearchSubMainID)
        {
            Model.Add(temp);
            // ~ 10 Jumps
        }
       // 72000 jumps
    }
}

问: 有没有办法优化foreach

4

3 回答 3

1

您可以使用Dictionary, 使您自己的类用作包含MainID和 的键SubMainID。有了这个Dictionary,你不必搜索,你只需找到......那种。

于 2013-08-06T09:11:40.643 回答
1

好吧,您可以将其中一项检查上移foreach

foreach (var item in MainToSub)
    if (item.SubMainID == SearchSubMainID)
        foreach (var temp in Main)
            if (item.MainID == temp.ID)
                Model.Add(temp);

这并不是真正的优化,但您也可以将其转换为 LINQ 表达式:

foreach (var temp in MainToSub
    .Where(i => i.SubMainID == SearchSubMainID)
    .Join(Main, i => i.MainID, t => t.ID, (i, t) => t))
        Model.Add(temp);
于 2013-08-06T09:12:42.700 回答
0

你也可以sort你的lists并尝试使用它来搜索它BinarySearch- 你有 O(log n)。但是解决方案Dictionary要简单得多。

于 2013-08-06T09:13:56.863 回答