如何在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);
答
如果您有在“NormValuelist”大项,然后它会更好,而不是使用字符串的StringBuilder(NormValue)
我怎么能在模型中使用这个..我想要使用像这样.. ** 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
@UniqueChar - 我更新了我的答案。不幸的是,我只是在猜测这个错误。 – 2013-05-10 13:37:50