2017-12-18 173 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

我认为整点是为了避免循环:) –