如何使用List<dynamic>

3
我需要从我的数据库中获取支付账单列表。以下是我的代码:
public static List<dynamic> GetBillers()
{
    DataLayer.DLContext context = new DataLayer.DLContext();

    var Billers = (from b in context.Biller
                   where b.IsActive == true && b.IsDeleted == false
                   select new
                   {
                       ID = b.ID,
                       DisplayName = b.DisplayName
                   }).ToList();

    return Billers;
}

我遇到了这个错误:

无法隐式转换类型 Collections.Generic.List<AnonymousType#1>System.Collections.Generic.List<dynamic>

请帮我解决。

这个链接 http://stackoverflow.com/questions/16645626/cannot-implicitly-convert-type-system-collections-generic-listanonymoustype1 可以帮助你。 - Chris
3
为什么不创建一个 Dto 来存储这些对象?这样你就不用依赖 dynamic 了。 - Simon Whitehead
3个回答

6
(from b in context.Biller
 where b.IsActive == true && b.IsDeleted == false
 select (dynamic) new {
     ID = b.ID,
     DisplayName = b.DisplayName
 }).ToList();

应该可以胜任这个工作。但是,就我个人而言,我不确定这是否是一个特别有帮助的举措 - 我建议返回一个已知的类/接口。 dynamic 有各种用途,但这并不是一个好的例子。

1
将其转换为动态类型:
var Billers = (from b in context.Biller
               where b.IsActive == true && b.IsDeleted == false
               select new
               {
                   ID = b.ID,
                   DisplayName = b.DisplayName
               }).ToList<dynamic>();

0

你不能将一个 List<T> 赋值给一个 List<dynamic> 对象。你需要逐个添加每个对象;

        var temp = new List<dynamic>();
        foreach (object obj in Billers)
        {
            temp.Add(obj);
        }

2
它也可以在现有查询中完成;此外,在这里,您显着更改了语义:原始查询仅使"ID"和"DisplayName"可用 - 可能是非常故意的。这使得原始对象可用。这可能是好事或坏事,但是:它与问题中代码的结果不同。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接