【问题标题】:Save the result of LINQ query to list将 LINQ 查询的结果保存到列表
【发布时间】:2015-07-30 00:18:30
【问题描述】:

我正在尝试创建处理程序以将 LINQ 查询的结果保存到列表以及我达到​​的目标

public static List<string> Get()
{
    LesamisContainer LC = new LesamisContainer();

    List<string> list = (from pb in LC.PayBills
                         join c in LC.Customers on pb.CustomerId equals c.Id
                         join d in LC.Departments on pb.DepartmentId equals d.Id
                         select new { pb.Id, c.FullName, d.Name, pb.Discount, pb.TotalAmount, pb.Details, pb.Date, pb.CustomerId, pb.DepartmentId } into x
                         select x).Tolist();
    return list;
}

但我遇到了这个异常

http://i60.tinypic.com/2lxu2o.png

无法将类型“System.Collections.Generic.List”转换为“System.Collections.Generic.List”

【问题讨论】:

  • 您的查询返回具有多个属性的匿名类型,但您正试图将其保存到 List&lt;string&gt;。您希望它如何工作?
  • 我是编程初学者,这就是我寻求帮助的原因:)

标签: c# linq


【解决方案1】:

您正在使用

创建一个匿名类型
select new { pb.Id, c.FullName, d.Name, pb.Discount, pb.TotalAmount, pb.Details, pb.Date, pb.CustomerId, pb.DepartmentId } into x

select x 只返回这种类型。要获得List&lt;string&gt;,您需要从这里返回属性,例如:select x.FullName

不过,这将是一种非常奇怪的做事方式,而且可能不是您真正想要的。我假设您实际上并不想要List&lt;string&gt;。

在这种情况下,由于您要从方法返回结果,因此应该声明它而不是匿名:

public class PayBillModel 
{
    public int Id {get;set;}
    ...
}

然后

select new PayBillModel() { pb.Id, c.FullName, d.Name, pb.Discount, pb.TotalAmount, pb.Details, pb.Date, pb.CustomerId, pb.DepartmentId }

这样,您最终会得到一个List&lt;PayBillModel&gt;。

【讨论】:

  • 我实际上想要一个列表来将数据绑定到 datagridview,并且没有为它初始化类,因为我首先使用实体​​框架模式,这将导致在未来生成数据库查询时会出现很多问题。对我来说,但这不是我想要的结果
【解决方案2】:

您将获得多种类型。尝试将List 类型更改为object 而不是string

List<object> list = (from pb in LC.PayBills
                         join c in LC.Customers on pb.CustomerId equals c.Id
                         join d in LC.Departments on pb.DepartmentId equals d.Id
                         select new { pb.Id, c.FullName, d.Name, pb.Discount, pb.TotalAmount, pb.Details, pb.Date, pb.CustomerId, pb.DepartmentId } into x
                         select x).Tolist();

然后您可以通过以下方式浏览列表:

foreach (object item in list)
{
   if (item is pb.Id)
   { 
      //do something
   }

   //or
   //if (item.GetType() == typeof(PayBills)) { }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多