Asp.net mvc返回带有Ienumerable的模型

时间:2012-05-26 23:40:40

标签: asp.net-mvc-3 linq-to-sql c#-4.0 model

我遇到了返回类型IEnumerable<>的问题我试图更好地理解的模型:

我有一个模型视图:

public class Photoview
{
    public int IdPhoto { get; set; }
    public DateTime Date { get; set; }
    public string Nom { get; set; }
    public int Category { get; set; }
    public string Lien { get; set; }
    public bool Actif { get; set; }
    public string Description { get; set; }
}

和一个从数据库中获取数据的模型:

    public IEnumerable<Photoview> GetAllPhotos()
    {
        var a = from o in _ajAentities.Photos
                select o;

        return a.ToList();
    }

但是,我遇到编译错误:无法将Generic.List类型转换为

数据库表是:

id_photo    int         Unchecked
date    smalldatetime   Checked
nom         nvarchar(250)   Checked
categorie   int         Checked
lien    nvarchar(250)   Checked
actif   bit         Checked
description nvarchar(800)   Checked

我的问题是:如何将GetAllPhotos()的Linq查询作为IEnumerable&lt;&gt;返回?输入?

由于

2 个答案:

答案 0 :(得分:1)

似乎_ajAentities.Photos的类型为IEnumerable<Models.DB.Photo>,但您尝试从方法中返回IEnumerable<Photoview>

因此,第一种可能性是修复您的返回类型以匹配数据库实体的类型:

public IEnumerable<Photo> GetAllPhotos()
{
    var a = 
        from o in _ajAentities.Photos
        select o;
    return a.ToList();
}

第二种可能性是在两种类型之间进行映射:

public IEnumerable<Photoview> GetAllPhotos()
{
    var a = 
        from o in _ajAentities.Photos
        select new Photoview
        {
            IdPhoto = o.Id,
            Date = o.Date,
            Nom = o.Nom,
            ....
        };

    return a.ToList();
}

您还可以查看AutoMapper来执行域模型与视图模型之间的映射。

答案 1 :(得分:0)

尝试一下:

var a = (IEnumerable<Object>)
        from o in _ajAentities.Photos
        select o;

它将IQueriable转换为从Linq返回的IEnumerable。不要使用.ToList(),因为您要将其转换为List类型集合。只需返回变量即可。