2013-05-10 100 views
0

我有一個帶有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; 
} 

感謝

回答

1

您可以重寫此查詢與string.Join避免創建多個在循環string對象,像這樣:

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

輪數到DB的條將保持不變,但是創建List<string> a部分級聯的string對象將被優化。

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); 
+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

0

如果您有在「NormValuelist」大項,然後它會更好,而不是使用字符串的StringBuilder(NormValue)