2014-08-27 89 views
0

我有concats 3 list一個LINQ的statement在一起:LINQ的第一項

var FinshedResults = QualificationList.Zip(SubjectList, (x, y) => x + y).Zip(GradeList, (x, y) => x + y); 

該出把這個是給我的是:

A Level - Test 1 (A*) A Level - Test 2 (A) A Level - Test 3 (B) A Level - Test 4 (C) A Level - Test 5 (D) A Level - Test 6 (E) A Level - Test 6 (E) A Level - Test 7 (F) 

A級存儲在QualificationList我只是想知道我們是否可以做到這一點,A級打印出來一次,其餘的都有測試1等等,所以輸出會更像是;

A Level - Test 1 (A) Test 2 (A) Test 3 (B) Test 4 (C) Test 5 (D) Test 6 (E) Test 6 (E) Test 7 (F) 

是否可以讓QualificationList只打印一次?或者這將不得不在循環中處理?感謝您提供的任何建議。

+0

資格與等級有什麼關係?好像你在這裏所做的一切就是將字符串附加在一起。 – James 2014-08-27 08:35:58

+0

請添加更多詳情。您正在使用一些只對您明確的思維快捷方式。列表不打印,你做什麼看起來不像「連接列表」。顯示如何使用此代碼以及輸入數據。 – BartoszKP 2014-08-27 08:36:51

+0

在循環linq語句時,由字符串構建器追加FinshedResults – willa 2014-08-27 08:37:20

回答

1

嘗試這樣:

QualificationList 
.GroupBy(x => x) 
.SelectMany(g => new[] { g.Key }.Concat(Enumerable.Repeat("", g.Count() - 1)) 
.Zip(SubjectList, (x, y) => x + y) 
.Zip(GradeList, (x, y) => x + y); 

我假設QualificationList是字符串列表。此查詢簡單組QualificationList,然後返回每個組的元素序列,其中第一個元素爲Key(例如A Level),其餘爲空字符串。然後像您一樣使用Zip,唯一的區別是其餘元素與空字符串連接,因此A Level不會出現一次以上。

+0

你測試了這個代碼嗎?它不會產生正確的結果。 – James 2014-08-27 08:53:32

+0

@詹姆斯,我沒有,它會產生什麼? – 2014-08-27 08:54:46

+0

單個結果 - 'A LevelTest 1(A)' – James 2014-08-27 08:57:48