我收到一个我无法找到解决方案的错误,就是我的模型不包含'AsEnumerable'的定义(我把整个错误放在帖子中较低),我读过它在Stack Overflow周围,所有答案似乎都指向using system.Linq
和using system.Data
,但我在代码中有它们。
该程序应该从表中获取一些数据:Contatti,Contacts和公司,它们位于不同的位置并将它们组合在一起(发生在控制器中的GET方法列表中),代码如下: / p>
型号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Globalization;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public partial class ContactsUni2
{
public IEnumerable<Contatti> Contattis { get; set; }
public IEnumerable<Companies> Companies { get; set; }
public IEnumerable<Contact> Contacts { get; set; }
}
提供错误的控制器GET:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using ContactManager.Models;
namespace ContactManager.Controllers
{
public class ContactsUni21Controller : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
private ContattiDB2 db2 = new ContattiDB2();
// GET: ContactsUni21
public ActionResult Index(String Page)
{
ContactsUni2 CU = new ContactsUni2();
CU.Contattis = db.Contattis.Include(i => i.ContattoID);
CU.Contacts = db.Contacts;
CU.Companies = db.Companies;
List<ContactsUni2> contactlist = new List<ContactsUni2>();
contactlist.Add(CU.AsEnumerable()); // The error is HERE at CU.AsEnumerable(), cannot convert from method group to 'contactsuni2'
return View(contactlist);
}
查看,对于Contatti.Count()
也会出现类似的错误@model IEnumerable<ContactManager.ViewModels.ContactsUni3>
@{
ViewBag.Title = "Index";
}
<h2>Contacts Unified</h2>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Contatti.Nome)
@Html.DisplayNameFor(model => model.Contatti.Citta)
@Html.DisplayNameFor(model => model.Contatti.ContattoID)
@Html.DisplayNameFor(model => model.Contatti.CodicePostale)
@Html.DisplayNameFor(model => model.Contatti.Email)
@Html.DisplayNameFor(model => model.Contact.Address)
@Html.DisplayNameFor(model => model.Contact.CompanyId)
@Html.DisplayNameFor(model => model.Contact.ContactId)
@Html.DisplayNameFor(model => model.Company.CompanyName)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
for (int i = 0; i < @item.Contatti.Count(); i++) // Second Error Here
{
<tr>
<td>
@item.Contatti[i].Nome
@item.Contatti[i].Citta
@item.Contatti[i].ContattoID
@item.Contatti[i].CodicePostale
@item.Contatti[i].Email
@item.Contatti[i].Address
@item.Contatti[i].CompanyId
@item.Contatti[i].ContactId
@item.Contatti[i].CompanyName
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.ContattoID }) |
@Html.ActionLink("Details", "Details", new { id = item.ContattoID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.ContattoID })
</td>
</tr>
}
}
</table>
</body>
</html>
Controller GET方法中的第一个错误:
错误CS1929'ContactsUni2'不包含'AsEnumerable'的定义,最好的扩展方法重载'DataTableExtensions.AsEnumerable(DataTable)'需要'DataTable'类型的接收器
当我尝试这样做时,它说:
无法从方法组转换为“contactsuni2”
View循环中的第二个错误:
错误CS1061'Contatti'不包含'Count'的定义,并且没有扩展方法'Count'可以找到接受类型'Contatti'的第一个参数(你是否缺少using指令或汇编引用?)< / p>
答案 0 :(得分:1)
请使用:
contactlist.Add(CU);
方法List.Add()
需要单个项目,而CU是单个项目。
要修复视图中的问题:只需在顶部添加一行@using System.Linq
,以便编译器知道要查找的位置。
有关AsEnumerable的其他信息:
如果你有一个集合或一系列项目但该集合与AsEnumerable()
等构造不兼容,则只需要foreach (var item in collection)
。
在这种情况下,您可以尝试使用foreach (var item in collection.AsEnumerable())
。
在某些情况下,.NET Framework可能已经提供了.AsEnumerable()
的实现,在其他情况下,您可能必须自己提供它。但就你的问题而言,你根本不需要它。
答案 1 :(得分:0)
您有两个不同的问题:
在ContactsUni21Controller
您正在调用AsEnumerable
的未实现IEnumerable
的对象上;您尝试将ContactsUni2
的实例添加到List<ContactsUni2>
,而不需要在此投放,因为它是与列表相同类型的实例含
正如@CodeCaster所提到的,您没有在Razor视图中添加@using System.Linq;
语句,导致您无法访问IEnumerable.Count
方法