【问题标题】:How to return a list from a method in C#如何从 C# 中的方法返回列表
【发布时间】:2014-05-22 20:32:51
【问题描述】:

如何返回包含 LINQ to SQL 查询结果的列表?我正在尝试这个实现,但我得到了这个错误。

不能隐式转换类型 'System.Collections.Generic.List<AnonymousType#1>''System.Collections.Generic.List<object>

任何帮助将不胜感激。

public List<Object> getShoes() 
{
    var query = from b in db.BrandTbls.AsQueryable()
                join m in db.ShoeModelTbls on b.BrandID equals m.BrandID 
                join s in db.ShoeTbls on m.ModelID equals s.ModelID 
                join i in db.ShoeImageTbls on s.ShoeID equals i.ShoeID 
                select new { s.ShoeID, s.Size, s.PrimaryColor, s.SecondaryColor, s.Quantity, m.ModelName, m.Price, b.BrandName, i.ImagePath };

    return query.ToList();
}

【问题讨论】:

  • 你可以做return query.Select(t =&gt; (object)t).ToList();
  • @UlugbekUmirov 然后它会编译,但是这种方法的用户将无法有效地使用它。
  • 供参考...也请查看old answer...
  • 您也可以将方法签名更改为public IList getShoes(),但正如@Servy 所说,使用结果会很尴尬——您必须使用dynamic(或反射)来访问属性。

标签: c# linq list


【解决方案1】:

匿名类型经过专门设计,可以完全在定义它们的范围内使用。如果要从此方法返回查询结果,则应创建一个新的命名类型来表示查询结果并选择该命名类型的实例,而不是匿名类型的实例。

【讨论】:

    【解决方案2】:

    你不能返回一个 T 是匿名类型的 List;您需要返回已知类型。你可以创建一个类

    public class MyResult
    {
        public string ShoeID {get; set;}
        public string Size {get; set;}
        public string PrimaryColor {get; set;}
        public string SecondaryColor {get; set;}
        public string Quantity {get; set;}
        public string ModelName {get; set;}
        public string Price {get; set;}
        public string BrandName {get; set;}
        public string ImagePath {get; set;}
    }
    

    然后像这样更改您的选择

    select new MyResult { ShoeID = s.ShoeID, Size = s.Size, PrimaryColor = s.PrimaryColor ........ };
    

    您的方法签名将更改为

    public List<MyResult> getShoes() 
    

    【讨论】:

    • +1。非常准确地说,您实际上可以返回“T 是匿名类型的列表”,但是也需要在方法之外传递这种匿名类型。 List&lt;T&gt; MyMethod&lt;T&gt;(T fake){ return Enumerable.Repeat(new {Field1:100}, 10).ToLsit();} ... var list = MyMethod(new {Field1=42})
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2011-04-14
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2013-07-23
    • 2012-02-08
    相关资源
    最近更新 更多