C# 为什么ICollection中的orderby给出System.Linq.OrderedEnumerable`2[对象,System.DateTime]?如何取回对象的列表/集合?

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

我正在创建一个Reservatie集合,并根据Controller中的DateTime对其进行排序。在测试课上,我要求返回,但我得到了键值对?返回为什么它提供OrderedEnumerable以及如何取回集合

控制器方法:

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
时,您会得到一个不同的类,它不会实现您的自定义接口。好的,我将删除(IOrderedEnumerable)。但我如何才能在模型或r1中获得保留的计数?直接在结果上只返回result.Model.count()不能调用count Model作为对象返回。此外,模型以OrderedEnumerable的形式返回。无论如何谢谢你的帮助!
Test 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>;