内の行を比較してください。私は次のコードを使用してTodaysTable
に存在していない私はYesterdaysTable
に何があるかを知らせるために違いを見つけるためにしようとすると、私はエラーを取得する:は、私はこのようになります2つのDataTableを持っているのDataTable
InvalidOperationException: the source contains no DataRows
が、そこは私の元で行です:
DataTable dtSource = new DataTable();
dtSource = yesterdaysTable.AsEnumerable().Except(todaysTable.AsEnumerable()).CopyToDataTable();
var difference = yesterdaysTable.AsEnumerable().Select(r => r.Field<string>("Apps")).Except(todaysTable.AsEnumerable().Select(r => r.Field<string>("Apps")));
if (difference.Any())
{
DataTable Table3 = (from row in todaysTable.AsEnumerable()
join app in difference on row.Field<string>("Apps") equals app
select row).CopyToDataTable();
}
私は似たコードを使用する場合、私は同じエラーを取得:
var appsNotInB = yesterdaysTable.AsEnumerable().Select(r => r.Field<string>("Apps"))
.Except(todaysTable.AsEnumerable().Select(r => r.Field<string>("Apps")));
var TableC = (from row in yesterdaysTable.AsEnumerable()
join id in appsNotInB on row.Field<string>("Apps") equals id
select row).CopyToDataTable();
を私は限りWRIにしようとして行ってきましたTE無駄に、List<string>
オブジェクトに差異を入れしようとするために、ループの入れ子になった:
for (int i = 0; i < yesterdaysTable.Rows.Count; i++)
{
for (int j = 0; j < todaysTable.Rows.Count; j++)
{
if (yesterdaysTable.Rows[i]["Apps"].ToString() != todaysTable.Rows[j]["Apps"].ToString())
{
//lstNoMatch.Add(yesterdaysTable.Rows[i]["Apps"].ToString());
lstNoMatch.Add(todaysTable.Rows[j]["Apps"].ToString());
}
}
}
私はいくつかの異なる解決策を試してみたが、何も作業していないと私はポストはなりたくありません不必要に長い私はデッドエンドをヒットしました:(
任意の提案は?クエリがローを返さdidntの場合
エラーが発生するのはどのラインですか? – ViRuSTriNiTy
@ViRuSTriNiTy:このLINQ文:= データテーブル表3( )(todaysTable.AsEnumerableの行からはrow.Fieldに差 におけるAPPを結合( "アプリ")は、アプリ 選択行に等しい).CopyToDataTable(); –
GrammatonCleric
'CopyToDataTable'は、クエリが行を返さなかった場合にこの例外をスローします。なぜ私はその方法を避ける一つの理由。 'query.Any()'で事前チェックするのを避けることができます。しかし、それは2回実行されます。行を追加するための古典的な 'foreach'が望ましいでしょう。 –