c#和Linq查询对象[,]
我有一个查询结果列表,每个查询结果都包含不同于其他对象的对象。每个数据集有一个类型。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工作表。
您可以使用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);
编辑
我误解了要求。对于你的第一部分来说,它看起来像是循环遍历每个元素是最好的方法。
不用担心,谢谢你花时间回复。是的,这就是我最终做的,好的循环。 – Matth
你可以通过JSON
var json = JsonConvert.SerializeObject(results);
var table = (DataTable)JsonConvert.DeserializeObject(json, typeof(DataTable))
把你的数据的集合到一个数据表,然后依靠你所选择的发动机输出数据表到Excel支持的格式
对不起,我无法赞成你,但谢谢你花时间回复。我结束了我的对象循环以完成工作。不是超高效的,但数据量在这方面永远不会有问题。 – Matth
我认为整点是为了避免循环:) –
你可以使用一个图书馆一样EPPlus这可以直接从任何集合,数据表或数据读取器加载数据,例如'var range = sheet.LoadFromCollection(myQueryResult)'。 Interop要求在同一台机器上安装Excel。像EPPlus这样的图书馆不需要任何东西 –