Visual Studio 2010から2012にアップグレードした後、「ArgumentOutOfRangeException - インデックスが範囲外です。コレクションのサイズ。パラメータ名:インデックス "は、結合を使用したLinqクエリです。Linq to EF Joinスロー「VS2010からVS2012へのアップグレード後にインデックスが範囲外です」
LINQPad(EFデータモデルを使用して)で行われた次の簡単な例は私に例外ArgumentOutOfRangeExceptionを与える:
void Main()
{
var iq1 = Customers.Select(ap => ap.ID);
var iq2 = iq1.Join(Customers.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a });
iq2.Dump();
}
参加の両側を含む匿名オブジェクトを返すために、前の例を変更するものではありません何らかの理由で、私は結合の両側を返す必要があったので、
void Main()
{
var iq1 = ActionPlans.Select(ap => ap.ID);
var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a, b });
iq2.Dump();
}
[OK]を、その後私はまた、PRなしで実行代わりにダミー値を使用して次の例を試した:例外ArgumentOutOfRangeExceptionと与える結果は予想通りoblem:
void Main()
{
var iq1 = ActionPlans.Select(ap => ap.ID);
var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a, x = 1 });
iq2.Dump();
}
最初の例に取ると、最初のクエリにToListメソッド()を追加することも、それは問題なく実行させる:
void Main()
{
var iq1 = ActionPlans.Select(ap => ap.ID).ToList();
var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a });
iq2.Dump();
}
重要:のないワークステーション上で最初のクエリをしようVisual Studio 2012のアップグレードは正常に動作します。
誰もこの新しい「機能」を確認/説明できますか? :-)
このバグは、LinqがEF Joinに提出した「VS2010からVS2012へのアップグレード後にインデックスが範囲外です」(https://connect.microsoft.com/VisualStudio/feedback/details/763986/linq- to-ef-join-throws-index-was-of-range-after-of-upgrade-from-vs2010-to-vs2012)が含まれています。それを再現できる場合は、Microsoftに伝えてください。修正があなたにとって重要な場合は、そこに "upvote"します。 –