如何在LINQ中编写此查询

时间:2013-05-10 13:16:14

标签: entity-framework c#-4.0 linq-to-entities

我有一个带有foreach循环的LINQ查询。一切都好。但是获得价值需要更多的时间。所以任何人都建议我如何在LINQ查询中做到这一点。

代码

NormValue = "";
c = 0;
var NormValuelist = db.BCont.Where(x => x.BId == BId && x.TNo == Tag).ToList();
foreach (var item in NormValuelist)
{
    if (c == 0)
        NormValue = item.NormValue;
    else
        NormValue += " " + item.NormValue;
    c = 1;
}

由于

3 个答案:

答案 0 :(得分:1)

您可以使用string.Join重写此查询,以避免在循环中创建多个string对象,如下所示:

string NormValue = string.Join(" ", db.BCont.Where(x => x.BId == BId && x.TNo == Tag));

到DB的往返次数将保持不变,但List<string>和部分连接的string对象的创建将被优化。

答案 1 :(得分:0)

除了使用String.Join之外,您还可以使用Enumerable.Aggregate

var NormValueList = 
    db.BCont.Where(x => x.Bid == BId && x.TNo == Tag)
            .Select(x => x.NormValue)
            .Aggregate((s, x) => s + " " + x);

答案 2 :(得分:0)

如果你在&#34; NormValuelist&#34;那么最好使用StringBuilder而不是string(NormValue)