I have a class called Property that I only need to display a few items from in my List view. I created a Linq query to return only those items in my controller Index method. I have instantiated
List<Property> props = new List<Property>();
within the Index method of the controller but when I try to “Add” to the props list “props.Add(getProp);” I’m receiving this error:
“The best overloaded method match for System.Collections.Generic.List<PropertyEntities.Property>.Add(PropertyEntities.Property)
has some invalid arguments”
I’ve included the PropertyControler Index Method, and the Property class that I’m working with below:
public ViewResult Index()
{
//var properties = db.Properties.Include(p => p.PropertyType);
var getProp = from p in db.Properties
orderby p.PropName
select new
{
p.PropertyID,
p.PropName,
p.PropertyStatus,
p.City,
p.State,
p.Bedrooms,
p.PropertyType
};
List<Property> props = new List<Property>();
props.Add(getProp);
return View(props);
}
public partial class Property
{
//public int temp { get; set; }
// Values stored in the view Garage DropDownList
public enum GarageType{ None = 0, One = 1, Two = 2, Three = 3, Four = 4, Carport = 5, Other = 6 }
public enum PropertyStatusType { Leased = 0, Available = 1, Selling = 2, Sold = 4 }
[Required]
[ScaffoldColumn(false)]
public int PropertyID { get; set; }
[Required(ErrorMessage="Generic name for referencing."),
StringLength(30, ErrorMessage = "Property name max length is 30 characters."),
Display(Name="Property Name", Prompt="Enter Property Name")]
public string PropName { get; set; }
[Required(ErrorMessage="Select a status for this property."),
Display(Name="Property Status")]
public int PropertyStatus { get; set; }
// used in corolation with the property PropertyStatus
// to allow dropdown list to except Enum values
// PropertyStatusType
public PropertyStatusType PropertyEnumStatus
{
get { return (PropertyStatusType)PropertyStatus; }
set { PropertyStatus = (int)value; }
}
[Required(ErrorMessage="Select a property type.")]
public int PropertyTypeId { get; set; }
[Required(ErrorMessage="Address is required."),
StringLength(75, ErrorMessage="Address max length is 75 characters.")]
public string Address { get; set; }
[Required(ErrorMessage = "City name is required."),
StringLength(25, ErrorMessage = "City max length is 25 characters.")]
public string City { get; set; }
[Required(ErrorMessage = "State abbreviation is required."),
StringLength(2, ErrorMessage = "State max length is 2 characters.")]
public string State { get; set; }
[Required(ErrorMessage = "Zip Code is required."),
StringLength(5, ErrorMessage = "Zip Code max length is 5 numbers."),
Range(00001, 99999)]
[Display(Name="Zip Code")]
public string ZipCode { get; set; }
[Required(ErrorMessage="Square feet is required."),
Display(Name="Square Feet")]
public int SquareFeet { get; set; }
[Required(ErrorMessage = "Number of bedrooms is required."),
Range(0,10)]
public int Bedrooms { get; set; }
[Required(ErrorMessage="Number of bathrooms is required."),
Range(0,20)]
public int Bathrooms { get; set; }
public int Garage { get; set; }
// used in corolation with the property Garage
// to allow dropdown list to except Enum values
// of GarageType
[NotMapped]
public GarageType GarageEnumValue
{
get { return (GarageType)Garage; }
set{ Garage = (int)value; }
}
[Display(Name="Morgage Amount"),
Range(0.00, 100000000.00)]
public Nullable<decimal> MonthlyMortgage { get; set; }
[Display(Name="HOA Dues"),
Range(0.00, 1000.00)]
public Nullable<decimal> HousingDues { get; set; }
[Display(Name="Property Tax"),
Range(0.0, 100000000.00)]
public Nullable<decimal> Tax { get; set; }
[Display(Name="Property Insurance"),
Range(0.0, 100000000.00)]
public Nullable<decimal> Insurance { get; set; }
[Display(Name="Assessed Value"),
Range(0.0, 100000000.00)]
public Nullable<decimal> AssessedValue { get; set; }
[Display(Name="Current Value"),
Range(0.0, 100000000.00)]
public Nullable<decimal> CurrentValue { get; set; }
[DataType(DataType.MultilineText)]
[StringLength(500, ErrorMessage="You have reached the allotted 500 characters.")]
public string Notes { get; set; }
public virtual ICollection<Lease> Leases { get; set; }
public virtual PropertyType PropertyType { get; set; }
public virtual ICollection<Service> Services { get; set; }
}
create a ViewModel class when you need a subset of an entity’s property, or a mix of subsets of entities properties
then select new PropertyViewModel for each property (or use AutoMapper, which would be fine for your need https://github.com/AutoMapper/AutoMapper )