2012-10-29 64 views
1

從SQL Server存儲過程'sp_help'的結果中,我們得到一個包含幾個表的DataSet。七,如果我是正確的。其中之一包含有關約束的信息。每個外鍵都由該表中的兩個連續行記錄。第一行包含約束類型,它的名稱和其他細節。後面跟着一個空行,除了一列,'constaint_keys'包含約束的列名引用。在Linq中創建一對由兩行組成的對夫婦

其他約束類型在一行中描述。

如何「扁平化」這一信息,使用LINQ,在某種程度上,我們可以肯定的是由兩行的任何一對夫妻是真正讓行的{N,N + 1}

感謝任何想法你的幫助!

+0

基本上你想要什麼要做的是將IEnumerable行分區到成對,對吧? 1,2,3,4,5,6,7,8→(1,2),(3,4),(5,6),(7,8) – Vitaliy

+0

這是正確的。 –

+0

但更準確地說,我想創建僅用於外鍵記錄的對,因爲信息分佈在兩行上。其他約束類型在一個記錄中描述。 –

回答

0

您可以使用Enumerable.Range()得到你要使用的索引範圍:

var unflattenedConstraints = constraintsTable.Rows; 
var constraints = from index in Enumerable.Range(0, unflattenedConstraints.Count/2) 
              .Select(x => x * 2) 
        let row1 = unflattenedConstraints[index] 
        let row2 = unflattenedConstraints[index + 1] 
        // Combine the rows 
+0

這很好的檢索外鍵的細節。謝謝! –

3

要由兩個收集IEnumerable的元素:

data.Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index/2)

+1

對不起,我的問題缺乏精確性:我無法訪問.Net 4.5。 –

+0

你使用什麼版本的框架? – AlexH

+0

你不需要.Net 4.5。 3.5就足夠了(甚至可能是3.0)。 – Vitaliy