c# – 将匿名集合放入类中

我有一个链接查询,它返回不同的数据列表,以填充网页上的不同网格,
但它总是返回一些标准属性以及一组匿名对象.

所以我想要一个具有’Total’,’Page’和’Count’的3个int属性的类
然后是属于集合的属性.我仍然希望更改属性,以便我可以使用此对象返回多种类型的查询.我知道我可以“硬输入”每个查询,但是有很多查询变体,最好有一个接受匿名集合的泛型类.

我试过使用的属性

List<object> myQueryCollection

但得到错误

Error 205 Cannot implicitly convert type
System.Collections.Generic.List<AnonymousType#1> to
System.Collections.Generic.List<object>

如何获得一个具有3个int属性的类和一个接受匿名类型的Collection属性.

我想从我的商业层传递一个适当的对象到我的观点……

var jsonData = new {
      total = totalPages,page = gridSettings.PageIndex,records = counter,rows = (from c in ucs select new {id = c.id,createDate =         
        c.CreateDate}).ToList()
};

解决方法

it would be best to have a generic type of class which would accept an Anonymous collection

然后你应该使你的类型通用,类似于lazyberezovsky在他的答案中建议的.您需要利用类型推断,这对构造函数不起作用.但您可以使用静态工厂方法

public static class ResultFactory
{
    public static Result<T> Create<T>(int total,int page,List<T> items)
    {
        return new Result<T> { Total = total,Page = page,Items = items };
    }
}

用法

var data = ResultFactory.Create(
      totalPages,gridSettings.PageIndex,(from c in ucs select new { c.id,createDate = c.CreateDate }).ToList());

如果您不想这样做,您可以使用协变接口,如IEnumerable(或IReadOnlyList,如果您使用.Net 4.5)而不是List.您无法转换List< AnonymousType>列出< object> (或IList< object>),因为这不安全.但是将其强制转换为IEnumerable< object>是安全的.

还有一个选择是创建List< object>首先包含匿名类型的对象.为此,请在调用ToList时指定类型:.ToList< object>()而不是.ToList().

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...