简单的LINQ语句失败 - 为什么?

时间:2012-03-09 21:15:36

标签: asp.net listviewitem

我有以下两行;

var currentPage = Directory.GetFiles(@"D:\mydir", "*.pdf")
  .Skip((pageNum - 1) * pageSize).Take(pageSize);

var allItems = currentPage.OrderBy(c => c)
  .Select(c => new ListViewItem(c)).ToArray();

以上2行失败,“CS1502:'System.Web.UI.WebControls.ListViewItem.ListViewItem(System.Web.UI.WebControls.ListViewItemType)'的最佳重载方法匹配'有一些无效的参数”。根据VS2010,错误是“新的ListViewItem( c )”。

我在想我错过了一些非常明显的东西 - 但我只是看不到它。

5 个答案:

答案 0 :(得分:2)

Directory.GetFiles()返回一个字符串数组。然后,您将获取这些字符串并尝试通过将字符串传递给ListViewItem构造函数来创建System.Web.UI.WebControls.ListViewItem数组。

问题是没有ListViewItem的构造函数接收字符串。

only constructor接收ListViewItemType

public ListViewItem(
    ListViewItemType itemType
)

这就是你收到错误的原因

  

System.Web.UI.WebControls.ListViewItem.ListViewItem(System.Web.UI.WebControls.ListViewItemType)的最佳重载方法匹配有一些无效的参数

答案 1 :(得分:0)

如果这是,您应该删除using System.Web.UI.WebControls;指令并确保改为using System.Windows.Forms;

如果这是,则无法使用ListViewItem作为构造函数的参数创建String的实例。有关构造函数的详细信息,请参阅MSDN上的here

答案 2 :(得分:0)

您正在尝试传递ListViewItem上一个查询的结果,该查询是一个字符串(文件名)。 ListViewItem没有接受它的构造函数。

尝试读取List或其他内容中的字符串,然后将其作为数据源添加到ListView控件中。

答案 3 :(得分:0)

var allItems = currentPage.OrderBy(c =&gt; c).Select(c =&gt; new ListViewItem((ListViewItemType)Enum.Parse(typeof(ListViewItemType),c,true)))。ToArray(); < / p>

摆脱错误,不知道这是否有助于你

答案 4 :(得分:0)

所以看起来你正试图将ListView绑定到这个指定文件名数组。您是否尝试过设置ListView的DataSource?

像这样:

myListView.DataSource = null;

var currentPage = Directory.GetFiles(@"D:\mydir", "*.pdf")
  .Skip((pageNum - 1) * pageSize).Take(pageSize);

var dataArray = currentPage.OrderBy(c => c).ToArray();

myListView.DataSource = dataArray;
myListView.DataBind();

有关绑定到IEnumerable的更多内容:http://forums.asp.net/t/1319474.aspx/1

希望有帮助...