我找不到这个具体的例子,所以我发布了这个问题.任何帮助赞赏.
我有两个大的通用列表,都有超过300K的项目.
我循环遍历第一个列表以回读信息并为动态生成新列表的新项目,但是我需要在第二个列表中搜索并根据三个匹配条件返回一个值,如果发现要添加到列表,但是你可以想象,这样做300k*300k次需要时间.
有什么方法可以更有效地做到这一点吗?
我的代码:
var reportList = new List<StocksHeldInCustody>();
foreach (var correctDepotHolding in correctDepotHoldings)
{
var reportLine = new StocksHeldInCustody();
reportLine.ClientNo = correctDepotHolding.ClientNo;
reportLine.Value = correctDepotHolding.ValueOfStock;
reportLine.Depot = correctDepotHolding.Depot;
reportLine.SEDOL = correctDepotHolding.StockCode;
reportLine.Units = correctDepotHolding.QuantityHeld;
reportLine.Custodian = "Unknown";
reportLine.StockName = correctDepotHolding.StockR1.Trim() + " " + correctDepotHolding.StockR2.Trim();
//Get custodian info
foreach (var ccHolding in ccHoldList)
{
if (correctDepotHolding.ClientNo != ccHolding.ClientNo) continue;
if (correctDepotHolding.Depot != ccHolding.Depot) continue;
if (correctDepotHolding.StockCode != ccHolding.StockCode) continue;
if (correctDepotHolding.QuantityHeld != ccHolding.QuantityHeld) continue;
reportLine.Custodian = ccHolding.Custodian;
break; …Run Code Online (Sandbox Code Playgroud) 我有一个列表,我想写入CSV字符串.
我发现的例子似乎都是针对单个项目列表,我的有多个项目.
我目前的代码是;
private static string CreateCSVTextFile<T>(List<T> data, string seperator = ",") where T : ExcelReport, new()
{
var objectType = typeof(T);
var properties = objectType.GetProperties();
var currentRow = 0;
var returnString = "";
foreach (var row in data)
{
var currentColumn = 0;
var lineString = "";
foreach (var info in properties)
{
lineString = lineString + info.GetValue(row, null) + seperator;
currentColumn++;
}
if (seperator != "")
{
lineString = lineString.Substring(0, lineString.Count() - 2);
}
returnString = returnString + …Run Code Online (Sandbox Code Playgroud) 我有一个我希望运行自动化任务的VM(即自动化任务在实际VM上运行).
VM是Windows 2008服务器.
我已将任务添加到任务计划程序中,当我通过RDP登录计算机时,我可以通过右键单击"运行"来运行任务.
但是,当我的RDP会话关闭时(但VM上的用户仍然登录)该任务尝试运行,但只打开notepad.exe,但不会写入文本.
vbs脚本如下(我们在这里使用简化...);
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "Notepad.exe"
Do Until Success = True
Success = objShell.AppActivate("Notepad")
Wscript.Sleep 1000
Loop
objShell.SendKeys "This is a test."
Run Code Online (Sandbox Code Playgroud)
我有这项任务在Windows XP机器上完美运行,我只是无法理解导致问题的原因.
当没有通过RDP连接时,似乎VM上没有找到键盘.当通过RDP连接时,MSTSC将VM发送到我的键盘,然后可以正确运行任务.
谢谢,
大卫
如何将c#中的通用列表批量插入SQL Server,而不是循环遍历列表并一次插入一个项目?
我现在有这个;
private void AddSnapshotData()
{
var password = Cryptography.DecryptString("vhx7Hv7hYD2bF9N4XhN5pkQm8MRfxi+kogALYqwqSuo=");
var figDb = "ZEUS";
var connString =
String.Format(
"Data Source=1xx.x.xx.xxx;Initial Catalog={0};;User ID=appuser;Password={1};MultipleActiveResultSets=True",
figDb, password);
var myConnection = new SqlConnection(connString);
myConnection.Open();
foreach (var holding in _dHoldList)
{
lbStatus.Text = "Adding information to SQL for client: " + holding.ClientNo;
_reports.AddZeusData("tblAllBrooksHoldingsSnapshot", "CliNo, SEDOL, ISIN, QtyHeld, DateOfSnapshot",
"'" + holding.ClientNo + "','" + holding.Sedol + "','" + holding.ISIN + "','" +
holding.QuantityHeld + "','" + DateTime.Today.ToString("yyyyMMdd") + "'", false, myConnection);
}
myConnection.Close();
lbStatus.Visible …Run Code Online (Sandbox Code Playgroud)