如何在LINQ中编写此查询

问题描述:

我有一个带有foreach循环的LINQ查询。一切安好。但获得价值需要更多时间。所以有人建议我如何在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; 
} 

感谢

您可以重写此查询与string.Join避免创建多个在循环string对象,像这样:

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

轮数到DB的条将保持不变,但是创建List<string> a部分级联的string对象将被优化。

除了使用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); 
+0

我怎么能在模型中使用这个..我想要使用像这样.. ** BTags = Db.BibContents.Where(x => x.BibId == q.BibId && x.TagNo ==“245”) .Aggregate((s,x)=> s +“”+ x.NormValue)** ..但显示错误。 Btags是一个字符串类型的模型属性。 – UniqueChar 2013-05-10 13:34:02

+0

@UniqueChar - 我更新了我的答案。不幸的是,我只是在猜测这个错误。 – 2013-05-10 13:37:50

如果您有在“NormValuelist”大项,然后它会更好,而不是使用字符串的StringBuilder(NormValue)