Linq - 对象的不同列表填充int数组

时间:2013-12-25 16:35:18

标签: c# linq

我正在尝试做,随机获取一个#34;对象列表#34;从所有列表。 我正在接受NullReferenceException我也尝试过List无法使其正常运行。

List<BL.Test.Test> Tests = BL.Test.GET.TestGroup(CategoryId);

// NullReferenceException on the line below:
int[] Groups = Tests.Select(d => d.TestGroupId).Distinct().ToArray(); 

Session["TestGroup"] = Tests.Select(t => t.TestGroupId = Groups[rnd.Next(Groups.Length)]);

Tests not null

2 个答案:

答案 0 :(得分:2)

显然,BL.Test.GET.TestGroup是返回null的方法。

这是您示例中第二行中NullReferenceException最可能的解释。

如果SelectDistinctToArraySystem.Linq中声明的扩展方法,则这是唯一可行的原因,请检查您的方法。

<强> UPD

对不起伙计们,我错了。

TestGroupId BL.Test.Test班的成员错过了。

<强> UPD-2

这是社区调试问题的一个很好的例子。据我所知,这里不受欢迎

答案 1 :(得分:0)

由于TestGroupIdnull,因此null.Distinct()会引发NullArgumentReference例外。 使用以下代码更改您的代码:

List<BL.Test.Test> Tests = BL.Test.GET.TestGroup(CategoryId);

int[] Groups = Tests.Where(d=>d.TestGroupId.HasValue).Select(d => d.TestGroupId).Distinct().ToArray(); 

Session["TestGroup"] = Tests.Select(t => t.TestGroupId = Groups[rnd.Next(Groups.Length)]);

利用HasValue查找TestGroupId是否有某些价值。