2017-12-18 190 views
0

我有一個查詢結果列表,每個查詢結果都包含不同於其他對象的對象。每個數據集有一個類型。c#和Linq查詢對象[,]

var myQueryresult = _myContext.TableA 
    .Where(a => a.IsToBeProcessed) 
    .Select(x => new { ColumnA = x.FieldA, ColumnB = x.FieldB }) 
    .ToList(); 

的最終目標是使用

Range firstCell = sheet.Cells[1, 1]; 
Range lastCell = sheet.Cells[data.GetLength(0) + 1, data.GetLength(1)]; 
sheet.Range[firstCell, lastCell].Value2 = myObjectArrayofObjectArrays; 

我似乎無法找到任何方式做到這一點,但循環對結果的每一行以這個數據存儲在Excel工作表。

+0

你可以使用一個圖書館一樣EPPlus這可以直接從任何集合,數據表或數據讀取器加載數據,例如'var range = sheet.LoadFromCollection(myQueryResult)'。 Interop要求在同一臺機器上安裝Excel。像EPPlus這樣的圖書館不需要任何東西 –

回答

0

您可以使用Excel庫的NamedRange.get_Resize Method以及NamedRange.set_Value Method (Object, Object)如下:

Excel.Range testRng = (Excel.Range)sheet.Cells[1, 1]; 
testRng = testRng.get_Resize(data.GetLength(0), data.GetLength(1)); 
testRng.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, myObjectArrayofObjectArrays); 

編輯

我誤解了要求。對於你的第一部分來說,它看起來像是循環遍歷每個元素是最好的方法。

+0

不用擔心,謝謝你花時間回覆。是的,這就是我最終做的,好的循環。 – Matth

0

你可以通過JSON

var json = JsonConvert.SerializeObject(results); 
var table = (DataTable)JsonConvert.DeserializeObject(json, typeof(DataTable)) 

把你的數據的集合到一個數據表,然後依靠你所選擇的發動機輸出數據表到Excel支持的格式

+0

對不起,我無法贊成你,但謝謝你花時間回覆。我結束了我的對象循環以完成工作。不是超高效的,但數據量在這方面永遠不會有問題。 – Matth

+0

我認爲整點是爲了避免循環:) –