如何 - 将Linq.DataQuery转换为Generic.List

时间:2012-11-10 14:36:35

标签: c# linq

你们中的任何人都可以帮我解决这个问题吗?将'carsList'变量转换为'_vehicleList'

时出现此错误

无法将'System.Data.Linq.DataQuery类型的对象强制转换为'System.Collections.Generic.List`1 [VehicleDAOModel]'。

Linq.DataQuery是否必须匹配VehicleDAOModel中的属性?

我的代码:

public class VehicleDAOModel
{
    [Display(Name = "Id")]
    public int _Id { get; set; }

    [Required]
    [Display(Name = "Year")]
    public string _year { get; set; }

    [Required]
    [Display(Name = "Make")]
    public string _make { get; set; }

    [Required]
    [Display(Name = "Model")]
    public string _model { get; set; }

    [Required]
    [Display(Name = "Trim")]
    public string _trim { get; set; }
}
        // LINQ TO SQL CODE

       var dataContext = new VehicleModelL2SQLDataContext();
        var carsList = from v in dataContext.Vehicles
                       select v;
        _vehicleList = (List<VehicleDAOModel>)carsList;

       public List<VehicleDAOModel> _vehicleList = new List<VehicleDAOModel>();

尝试了以下但没有奏效: carsList.ToList(); (X) carsList.AsEnumerable()LoList(); (X)

提前谢谢。

2 个答案:

答案 0 :(得分:0)

只需.ToList()上的carsList

_vehicleList = carsList.ToList();

carsList是一个查询,一旦被读取就会被执行。 .ToList()读取完整的查询结果并将其作为List<T>返回。

但是这确实会让查询返回VehicleDAOModel。如果没有,那么你需要使用.Select()并自己转换它。

答案 1 :(得分:0)

假设您的车辆实体类未命名为“VehicleDAOModel”,您需要将项目 carsList添加到VehicleDAOModel个对象的列表中。

_vehicleList = carsList.Select( c =>
                   new VehicleDAOModel {
                       Id = c.Id,
                       Year = c.Year,
                       ...
                       });

我强烈建议您使用Automapper

Mapper.Map<Vehicle, VehicleDAOModel>();
_vehicleList = carsList.Project.To<VehicleDAOModel>();

(假设两个类之间存在1:1的属性名称映射。)