Excelからいくつかの行を処理し、クエリを実行し、いくつかの変数(12 var
)に格納しています。 dtremoverows
には、Excelのデータが含まれています。動的変数をデータテーブルにバインドして再帰的に処理する
private System.Data.DataTable RemoveRows(System.Data.DataTable dtremoverows, bool mage)
{
System.Data.DataTable dtreturnrows = new System.Data.DataTable();
int rowcount = dtremoverows.Rows.Count;
var RemoveRows1 = dtremoverows.AsEnumerable().Where(r => r["CRE_DATE"].ToString() == "" && r["EMP_NO/Emp_Name"].ToString() == "").ToList();
var RemoveRows2 = dtremoverows.AsEnumerable().Where(r => r["CRE_DATE"].ToString() == "" && r["QTY"].ToString() == "").ToList();
var RemoveRows3 = dtremoverows.AsEnumerable().Where(r => r["CRE_DATE"].ToString().Contains("Total in Group:") || r["QTY"].ToString().Contains("Total in Group:") || r["EMP_NO/Emp_Name"].ToString().Contains("Total in Group:") || r["WO_NO"].ToString().Contains("Total in Group:") || r["ROLE_CODE"].ToString().Contains("Total in Group:") || r["CATALOG_NO"].ToString().Contains("Total in Group:")).ToList();
var RemoveRows4 = dtremoverows.AsEnumerable().Where(r => r["CRE_DATE"].ToString().Contains("Print Date/Time") || r["QTY"].ToString().Contains("Print Date/Time") || r["EMP_NO/Emp_Name"].ToString().Contains("Print Date/Time") || r["WO_NO"].ToString().Contains("Print Date/Time") || r["ROLE_CODE"].ToString().Contains("Print Date/Time") || r["CATALOG_NO"].ToString().Contains("Print Date/Time")).ToList();
var RemoveRows5 = dtremoverows.AsEnumerable().Where(r => r["EMP_NO/Emp_Name"].ToString() == "" && r["QTY"].ToString() == "").ToList();
var RemoveRows6 = dtremoverows.AsEnumerable().Where(r => r["CRE_DATE"].ToString() == "0" || r["EMP_NO/Emp_Name"].ToString() == "0" || r["CATALOG_NO"].ToString() == "0").ToList();
var RemoveRows7 = dtremoverows.AsEnumerable().Where(r => r["CATALOG_NO"].ToString().Contains("Total Amount") || r["QTY"].ToString().Contains("Total Resource Count")).ToList();
var RemoveRows8 = dtremoverows.AsEnumerable().Where(r => r["WO_NO"].ToString() == "" || r["QTY"].ToString() == "" || r["QTY"].ToString() == "0").ToList();
var RemoveRows9 = dtremoverows.AsEnumerable().Where(r => r["EMP_NO/Emp_Name"].ToString() == "<None>" && (r["QTY"].ToString() == "" || r["CATALOG_NO"].ToString() == "")).ToList();
var RemoveRows10 = dtremoverows.AsEnumerable().Where(r => r["WO_NO"].ToString() == "Work Ord" && r["EMP_NO/Emp_Name"].ToString() == "Employee #/Sales Part #").ToList();
var RemoveRows11 = dtremoverows.AsEnumerable().Where(r => r["QTY"].ToString() == "0" || r["QTY"].ToString() == "").ToList();
var RemoveRows12 = dtremoverows.AsEnumerable().Where(r => r["CRE_DATE"].ToString() == "" && r["WO_NO"].ToString() == "" && r["EMP_NO/Emp_Name"].ToString() == "" && r["ROLE_CODE"].ToString() == "" && r["CATALOG_NO"].ToString() == "" && r["QTY"].ToString() == "" && r["PLAN_LINE_NO"].ToString() == "" && r["WORK_ORDER_COST_TYPE"].ToString() == "" && r["WORK_ORDER_ACCOUNT_TYPE"].ToString() == "" && r["ORG_CODE"].ToString() == "" && r["CMNT"].ToString() == "").ToList();
}
次に、それぞれの変数をループとして追加しています。私は私のコーディング(下記)が推奨されなくなったと思いますので、これを単一の再帰的ループとして使用できますか?その後、
try
{
if (RemoveRows1.Count() != 0)
{
foreach (var row in RemoveRows1)
{
dtremoverows.Rows.Remove(row);
}
}
}
catch { }
try
{
if (RemoveRows2.Count() != 0)
{
foreach (var row in RemoveRows2)
{
dtremoverows.Rows.Remove(row);
}
}
}
catch { }
......... などなど... RemoveRows12
件までとしてマージ:これは動作しますが、私は本当にこのコーディングのより良いアプローチの必要
dtreturnrows.Merge(dtremoverows);
。ご提案があれば、お答えください。
こんにちは、私はExcelからさまざまな行から抽出しており、それらを維持する必要があるため、多くの変数を使用しています。あなたの提案をありがとう。あなたが他のものを持っているなら、私はそれを聞くのが大好きです。 –
'LINQ'を使用しているので、whereの中で' various rows'を指定することができます。 –
私はあなたのスニペットに従った。演算子を表示します。||ラムダとブール操作に使用することはできません –