lashja
lashja

Reputation: 493

How can I convert List<AnonymousType#1> to List<Model>?

In my MVC application have 4 model classes.

ProductModel.cs

public class ProductModel  
{  
    public int ProductID { get; set; }  
    public string ProductName { get; set; }  
    public int SupplierID { get; set; }  
    public int CategoryID { get; set; }  
}  

CategoriesModel.cs

public class CategoriesModel  
{  
    public int CategoryID { get; set; }  
    public string CategoryName { get; set; }  
    public string Description { get; set; }  
}  

SuppliersModel.cs

public class SuppliersModel  
{  
    public int SupplierID { get; set; }  
    public string CompanyName { get; set; }  
    public string ContactName { get; set; }  
    public string ContactTitle { get; set; }  
    public string Phone { get; set; }  
    public string City { get; set; }  
    public string Country { get; set; }  
}  

Products_Categories_SuppliersModel - Class with all the required properties from above three classes.

public class Products_Categories_SuppliersModel  
{  
    public string ProductName { get; set; }  
    public string ContactName { get; set; }  
    public string ContactTitle { get; set; }  
    public string CompanyName { get; set; }  
    public string Phone { get; set; }  
    public string City { get; set; }  
    public string Country { get; set; }  
    public string CategoryName { get; set; }  
    public string Description { get; set; }  
}  

I have data in List<ProductModel>, List<CategoriesModel>, List<SuppliersModel>. Used Linq to join all three Lists.

 public List<Products_Categories_SuppliersModel> GetProduct_Category_SupplierData()  
{  
    try  
    {  
        List<ProductModel> prodData = GetProductsData().ToList();  
        List<CategoriesModel> categData = GetCategoriesData().ToList();  
        List<SuppliersModel> supplData = GetSuppliersData();  
        var DBData = (from p in prodData  
                     join c in categData  
                     on p.CategoryID equals c.CategoryID  
                     join s in supplData on p.SupplierID equals s.SupplierID  
                     select new  
                     {  
                         p.ProductName,  
                         c.CategoryName,  
                         c.Description,  
                         s.ContactName,  
                         s.ContactTitle,  
                         s.CompanyName,  
                         s.Phone,  
                         s.City,  
                         s.Country  
                     });  
        return DBData.ToList();  
    }  
    catch (Exception) { return null; }  
    finally {}  
}  

But Line # 24 throws error:

 Cannot implicitly convert type
 'System.Collections.Generic.List<AnonymousType#1>' to
 'System.Collections.Generic.List<MVCApp.Models.Products_Categories_SuppliersModel>'.

What's the mistake in above code? I have created Products_Categories_SuppliersModel class such that return data should be of Products_Categories_SuppliersModel type.

Upvotes: 1

Views: 78

Answers (2)

mrsauravsahu
mrsauravsahu

Reputation: 2208

Write your select statement like this

select new  MVCApp.Models.Products_Categories_SuppliersModel
{  
ProductName = p.ProductName,
CategoryName = c.CategoryName,
Description = c.Description,
ContactName = s.ContactName,
ContactTitle = s.ContactTitle,
CompanyName = s.CompanyName,
Phone = s.Phone,
City = s.City,
Country = s.Country };

Upvotes: 4

Stephen Gilboy
Stephen Gilboy

Reputation: 5825

Just instantiate Products_Categories_SuppliersModel in your select.

    var DBData = (from p in prodData  
                 join c in categData  
                 on p.CategoryID equals c.CategoryID  
                 join s in supplData on p.SupplierID equals s.SupplierID  
                 select new Products_Categories_SuppliersModel()  
                 {  
                     p.ProductName,  
                     c.CategoryName,  
                     c.Description,  
                     s.ContactName,  
                     s.ContactTitle,  
                     s.CompanyName,  
                     s.Phone,  
                     s.City,  
                     s.Country  
                 });  

Upvotes: 2

Related Questions