2014-06-30 8 views
35

Ten błąd dzieje się w wielu plików w moich „Widok” Folder:System.Collections.Generic.List nie zawiera definicji „Wybierz”

„System.Collection.GenericList” nie zawierają definicję „Wybierz” przyjęcie pierwszego argumentu typu „System.Collections.GenericList” można odnaleźć (czy brakuje using dyrektywa lub odwołania do zestawu?)

próbowałem dodanie kilka "używając System ..." i innych podstawowych bibliotek w górnej części pliku ale dodanie ich nie pomaga.

To gdzie występuje błąd dla mnie jest w linii zaczynającej się .BindTo(Model.Users.Select(o => o.UserName)):

Każda pomoc będzie mile widziana. Dzięki!

<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> 
+4

Użycie 'System.Linq' dałoby ci dostęp do' Wybierz' ' –

+1

Czy używasz' using System.Linq'; – Habib

+1

brzmi, jakby brakowało 'using System.Linq' –

Odpowiedz

90

Wystarczy dodać tę przestrzeń nazw,

using System.Linq; 
+3

Ponieważ jest to Razor, składnia jest bardziej prawdopodobna niż "@using System.Linq", lub możesz go wsunąć w web.config wewnątrz folderu View. – vcsjones

+3

Tak, czytałem o tym rozwiązaniu z podobnych problemów innych osób. Problem jednak polega na tym, że nawet gdy dodam te zmiany, błąd nadal istnieje. Próbowałem nawet ręcznie dodać referencję, dodając samą bibliotekę DLL i to też nie pomaga zbytnio. Zaczynasz myśleć, że być może kilka moich zestawów ma niedopasowane wersje? Jeśli tak, czy ktoś ma jakieś pomysły, jak to naprawić? – Ogreintel

21

Musisz mieć System.Linq nazw zawartych w widoku od Select jest metoda rozszerzenie. Masz kilka opcji, jak to zrobić:

Dodaj @using System.Linq do górnej części pliku cshtml.

Jeśli okaże się, że będzie za pomocą tego obszaru nazw często w wielu widokach, można to zrobić za wszystkich poglądów poprzez modyfikację pliku web.config od wewnątrz folderu widoki (nie ten, u nasady). Powinieneś zobaczyć element XML strony/XML przestrzeni nazw, stworzyć nowe dziecko, które doda System.Linq. Oto przykład:

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

Zrobiłem wszystko powyżej i z jakiegoś powodu mówi mi, że: "Nazwa typu lub przestrzeni nazw" Linq "nie istnieje w przestrzeni nazw" System "(czy brakuje odniesienia do zestawu?)". Nie mogę znaleźć tego odniesienia za każdym razem, gdy spróbuję dodać nowy w podfolderze "Referencje". – Ogreintel

+0

Zmodyfikowałem konfigurację przez ręczne dodanie "System.Linq", tak jak opisałeś powyżej. Więc nie jestem pewien, dlaczego tak się dzieje, ponieważ wydaje się, że tak nie powinno być. – Ogreintel

+0

Wygląda na to, że musisz dodać odniesienie do System.Core. – vcsjones

3

miałem ten problem, Dzwoniąc Generic.List jak:

mylist.Select(selectFunc) 

Gdzie selectFunc jest zdefiniowany jako Expression<Func<T, List<string>>>. Po prostu zmieniono "mylist" na IQuerable zamiast List, a następnie pozwolono mi używać .Select.

Powiązane problemy