【问题标题】:System.Collections.Generic.List does not contain a definition for 'Select' [duplicate]System.Collections.Generic.List 不包含“选择”的定义 [重复]
【发布时间】:2020-02-23 19:00:31
【问题描述】:

此错误发生在我的“视图”文件夹中的许多文件中:

'System.Collection.GenericList' 不包含 “选择”的定义接受类型的第一个参数 'System.Collections.GenericList' 可以找到(你是 缺少 using 指令或程序集引用?)

我尝试在文件顶部附近添加一堆“使用系统...”和其他基本库,但添加这些似乎没有任何帮助。

这就是我发生错误的地方以.BindTo(Model.Users.Select(o => o.UserName))开头的行:

任何帮助将不胜感激。谢谢!

 <div id="editRolesContainer" class="detailContainer detailContainer4">
    <header class="sectionheader"> Add Roles </header>
    <ul id = "AdminSelectUserContainer" >
       <li>
          <ul style="padding: 0 0 0 5px">
             <li>Select User : </li>
             <li>
                @using (Html.BeginForm("srch_GetUserRoles", "Admin",
                   new { view = "Users_Roles" }, FormMethod.Post,
                   new { name = "srch_GetUserRoles" }))
                {
                   @(Html.Telerik().AutoComplete()
                          .Name("acx_SelectUser")
                          .BindTo(Model.Users.Select(o => o.UserName))
                              .HtmlAttributes(new { type "submit"   })
                          .HtmlAttributes(new { @class = "SearchBox"})
                          .AutoFill(true)
                          .Filterable((filtering =>
                              {
                                 filtering.FilterMode(AutoCompleteFilterMode.Contains);
                              }))
                  )
                }
             </li>
            </ul>
           ...
           ...
           </div>

【问题讨论】:

  • 使用System.Linq 可以让您访问Select
  • 你有using System.Linq;
  • 听起来你缺少using System.Linq
  • Model.Users 是什么类型?当我有一个错字并试图在一个不可枚举的属性上使用 .Where 时,我得到了这个。

标签: c# linq


【解决方案1】:

只需添加这个命名空间,

using System.Linq;

【讨论】:

  • 由于是 Razor,语法更可能是@using System.Linq,或者您可以将其放入 View 文件夹内的 web.config 中。
  • 是的,我从其他人的类似问题中了解到该解决方案。我遇到的问题是,即使我添加了这些更改,错误仍然存​​在。我什至尝试通过自己添加 DLL 来手动添加引用,但这似乎也没有多大帮助。开始认为也许我的一些程序集的版本不匹配?如果是这样,有人对如何解决这个问题有任何想法吗?
【解决方案2】:

您需要在视图中包含 System.Linq 命名空间,因为 Select 是一种扩展方法。对于如何执行此操作,您有两种选择:

@using System.Linq 添加到您的 cshtml 文件的顶部。

如果您发现您将在许多视图中经常使用此命名空间,您可以通过修改 Views 文件夹中的 web.config(不是位于根)。您应该看到一个页面/命名空间 XML 元素,创建一个新的 add 子元素,它添加了 System.Linq。这是一个例子:

<configuration>
    <system.web.webPages.razor>
        <pages>
            <namespaces>
                <add namespace="System.Linq" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>
</configuration>

【讨论】:

  • 我已经完成了上述所有操作,但由于某种原因,它告诉我:“名称空间 'System' 中不存在类型或名称空间名称 'Linq'(您是否缺少程序集参考?)”。不过,每当我尝试在“参考”子文件夹中添加新参考时,我似乎都找不到此参考。
  • 我已经通过手动添加“System.Linq”修改了网络配置,就像你上面描述的那样。所以我不确定它为什么要这样做,因为它看起来不应该这样做。
  • 看来您需要添加对 System.Core 的引用。
【解决方案3】:

我遇到了这个问题,当调用 Generic.List 时:

mylist.Select( selectFunc )

其中 selectFunc 定义为Expression&lt;Func&lt;T, List&lt;string&gt;&gt;&gt;。只需将“mylist”更改为IQuerable 而不是List 然后它允许我使用.Select

【讨论】:

    【解决方案4】:

    这个问题有点老了,但是,有一个棘手的场景也会导致这个错误:

    在控制器中:

    ViewBag.id = //id from querystring
    List<string> = GrabDataFromDBByID(ViewBag.id).Select(a=>a.ToString());
    

    上面的代码会导致这部分报错:.Select(a=&gt;a.ToString()),原因如下: 您将 ViewBag.id 传递给编译器中不知道类型的方法,因此可能有多个方法具有相同的名称和不同的参数,比如说:

    GrabDataFromDBByID(string)
    GrabDataFromDBByID(int)
    GrabDataFromDBByID(whateverType)
    

    所以为了防止这种情况,要么显式转换 ViewBag,要么创建另一个变量来存储它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多