/ / Опит за връщане на списъка Linq Query в MVC3 Преглед на грешка при получаване „има някои невалидни аргументи“ - asp.net-mvc, asp.net-mvc-3, generics, linq-to-subjects

Опитвате се да върнете заявка на Linq за запитване в MVC3 Преглед на грешка при получаване „има някои невалидни аргументи“ - asp.net-mvc, asp.net-mvc-3, generics, linq-to-subjects

Имам клас, наречен Свойство, от който имам нужда само да покажа няколко елемента от моя изглед на списъка. Създадох заявка за Linq, за да върна само тези елементи в метода на моя контролер Index. Аз съм инстанцирал

List<Property> props = new List<Property>();

в метода Index на контролера, но когато се опитвам да "добавя" към подпори списък "props.Add (getProp);" Получавам тази грешка:

„Най-добрият претоварен метод съвпада с System.Collections.Generic.List<PropertyEntities.Property>.Add(PropertyEntities.Property) има някои невалидни аргументи "

Включих метода на индекса PropertyControler и класа на свойствата, с които работя по-долу:

     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; }
}

Отговори:

1 за отговор № 1

създайте клас ViewModel, когато се нуждаете от подмножество на свойството на образувание или комбинация от подмножества от свойства на образувания

public class PropertyViewModel {
public int PropertyID {get;set;}
public string PropName {get;set;}
public int PropertyStatus {get;set;}
//etc.
public PropertyType PropertyType {get;set;}
}

след това изберете нов PropertyViewModel за всеки имот (или използвайте AutoMapper, което би било добре за вашите нужди https://github.com/AutoMapper/AutoMapper )

public ViewResult Index()
{
var properties = db.Properties.Include(prop => prop.PropertyType)
.Select(p => new PropertyViewModel {
PropertyID = p.PropertyID,
PropName = p.PropName,
//etc.
})
.ToList();
return View(properties);//View"s model should be of tye IList<PropertyViewModel> (or IEnumerable)
}

0 за отговор № 2

добре, изглежда, че се връщате IEnumerable<T> от анонимен тип от линк заявката, но очакваме List<Property> да приемете тези обекти като тип Property, така естествено Add метод ще устои.