C# 为什么ICollection中的orderby给出System.Linq.OrderedEnumerable`2[对象,System.DateTime]?如何取回对象的列表/集合?
我正在创建一个Reservatie集合,并根据Controller中的DateTime对其进行排序。在测试课上,我要求返回,但我得到了键值对?返回为什么它提供OrderedEnumerable以及如何取回集合 控制器方法:C# 为什么ICollection中的orderby给出System.Linq.OrderedEnumerable`2[对象,System.DateTime]?如何取回对象的列表/集合?,c#,linq,C#,Linq,我正在创建一个Reservatie集合,并根据Controller中的DateTime对其进行排序。在测试课上,我要求返回,但我得到了键值对?返回为什么它提供OrderedEnumerable以及如何取回集合 控制器方法: public ActionResult Index(Gebruiker gebruiker) { ICollection<Reservatie> reservatielijst = gebruiker.Reservaties; if (reserv
public ActionResult Index(Gebruiker gebruiker)
{
ICollection<Reservatie> reservatielijst = gebruiker.Reservaties;
if (reservatielijst.Count == 0)
{
return View("leeg");
}
return View(reservatielijst.OrderBy(r => r.StartDatum));
}
从错误中可以看出,您已经定义了自己的
iorderenumerable
接口OrderBy
返回一个类,该类从Linq实现iorderenumerable
接口;它不知道您的自定义接口,因此无法将结果转换到它
您只需强制转换到IEnumerable
即可访问Linq扩展方法:
var r1 = result.Model as IEnuerable<Reservatie>;
var r1=result.Model可查询;
(IOrderedEnumerable)
是错误的,您得到的是按日期(StartDatum)排序的IOrderedEnumerable
,换句话说,集合与按StartDatum排序的集合相同。只需将模型强制转换为IOrderedEnumerable
是的,为了能够强制转换,我在测试类本身中创建了IOrderedEnumerable接口。我仍然无法投球。我不需要IOrderedEnumerable,但模型总是作为OrderedEnumerable返回,带或不带IOrderedEnumerable。我正在尝试访问模型中Reservatie的nr。使用var时,我不能调用count或list或任何东西。@SureshSubedi好的,我知道哪里出了问题。ViewResult.Model
Model的类型只是对象,因此不能直接对其调用linq方法。不过,您应该可以将其转换为IEnumerable
。我也无法将其转换为ICollection。但这解决了问题。非常感谢。因为它不是一个i集合
OrderBy
返回一个迭代器,该迭代器按指定顺序返回项。模型类型为OrderedEnumerable。我试图将其转换为IOrderedEnumerable,但无法做到这一点。我只需要模型中的Reservatie计数。@SureshSubedi但是当您调用OrderBy
时,您会得到一个不同的类,它不会实现您的自定义接口。好的,我将删除(IOrderedEnumerableTest Name: IndexGeeftAlleReservatiesVoorHuidigeGebruiker
Test FullName: DidactischeLeermiddelen.Tests.Controllers.ReservatieControllerTest.IndexGeeftAlleReservatiesVoorHuidigeGebruiker
Test Source: C:\Users\Suresh SUBEDI\Projecten II 2015 - 2016\groep22DotNet\DidactischeLeermiddelen.Tests\Controllers\ReservatieControllerTest.cs : line 44
Test Outcome: Failed
Test Duration: 0:00:00.3139783
Result StackTrace: at DidactischeLeermiddelen.Tests.Controllers.ReservatieControllerTest.IndexGeeftAlleReservatiesVoorHuidigeGebruiker() in C:\Users\Suresh SUBEDI\Projecten II 2015 - 2016\groep22DotNet\DidactischeLeermiddelen.Tests\Controllers\ReservatieControllerTest.cs:line 53
Result Message:
Test method DidactischeLeermiddelen.Tests.Controllers.ReservatieControllerTest.IndexGeeftAlleReservatiesVoorHuidigeGebruiker threw exception:
System.InvalidCastException: Unable to cast object of type 'System.Linq.OrderedEnumerable`2[DidactischeLeermiddelen.Models.Domain.Reservatie,System.DateTime]' to type 'DidactischeLeermiddelen.Tests.Controllers.IOrderedEnumerable`2[DidactischeLeermiddelen.Models.Domain.Reservatie,System.DateTime]'.
var r1 = result.Model as IEnuerable<Reservatie>;