2014-06-12 8 views
7

mam dwa modele, użytkownik i zespół jak poniżej:nie może zrobić asqueryable na kolekcji MongoDB

[BsonRepresentation(BsonType.ObjectId)] 
    public ObjectId _id { get; set; } 
    [Display(Name = "Password:")] 
    public string Password { get; set; } 
    [Display(Name = "Confirm:")] 
    public string ConfirmPassword { get; set; } 
    [Display(Name = "Email:")] 
    public string Email { get; set; } 
    [Display(Name = "Username:")] 
    public string UserName { get; set; } 
    [Display(Name = "Firtname:")] 
    public string Firstname { get; set; } 
    [Display(Name = "Lastname:")] 
    public string Lastname { get; set; } 
    [Display(Name = "Country:")] 
    public string Country { get; set; } 
    [Display(Name = "City:")] 
    public string City { get; set; } 
    [Display(Name = "Birthdate:")] 
    public int Birthdate { get; set; } 
    public List<Team> Teams { get; set; } 


    [BsonRepresentation(BsonType.ObjectId)] 
    public ObjectId TeamID { get; set; } 
    public string TeamName { get; set; } 
    public string UserName { get; set; } 
    public int LeagueID { get; set; } 

    public List<Player> Player { get; set; } 

więc utworzone przez użytkownika, ale teraz chcę dodać zespoły do ​​mojego użytkownika. Jest to kod używam:

var databaseClient = new MongoClient(Settings.Default.FantasySportsConnectionString); 
    var server = databaseClient.GetServer(); 
    var database = server.GetDatabase("Users"); 
    var collection = database.GetCollection<User>("users"); 

    var user = collection.AsQueryable().First(o => o._id == Session["ID"]); 

    user.Teams.Add(new Team { TeamID = new ObjectId(), TeamName = "Some Team" }); 

Ale kiedy ja to mogę dostać te błędy:

1: Instance argument: cannot convert from 'MongoDB.Driver.MongoCollection<SportsFantasy_2._0.Models.User>' to 'System.Collections.IEnumerable'

2: 'MongoDB.Driver.MongoCollection<SportsFantasy_2._0.Models.User>' does not contain a definition for 'AsQueryable' and the best extension method overload 'System.Linq.Queryable.AsQueryable(System.Collections.IEnumerable)' has some invalid arguments

+0

'AsQueryable' jest metoda rozszerzenie dla' IEnumerable '' MongoCollection' nie trzeba będzie tworzyć jedną lub być może istnieje klasa rozszerzeń LINQ do Mongo już –

Odpowiedz

9

brakuje przestrzeni nazw , MongoDB.Driver.Linq, po prostu dodaj to na górze:

using MongoDB.Driver.Linq; 

To specyficzna metoda jest:

LinqExtensionMethods 
{ 
    public static IQueryable<T> AsQueryable<T>(this MongoCollection<T> collection); 
    //... 
} 
+0

Dodałem że teraz jednak mówi: błąd operator „==” nie mogą być stosowane do operandy typu „MongoDB.Bson.ObjectId” i „obiektu” \t na użytkownika linia var = collection.AsQueryable() w pierwszej kolejności. (o => o._id == Sesja ["ID"]); –

+2

@ DanielGustafsson To zupełnie inny problem. Rzeczywiście _id ma wartość ObjectID, a sesja ["ID"] jest obiektem. Jeśli jesteś pewien, że to w rzeczywistości ObjectID, po prostu go obsadź: o.id == (ObjectID) Sesja ["ID"] – i3arnon

1

byłem coraz ten sam błąd zz V2.3.0 kierowcy .NET. Usunąłem go i zainstalowałem v2.2.4 używając NuGet i działało. Wystąpił błąd: Nie znaleziono metody: "MongoDB.Driver.Linq.IMongoQueryable 1<!!0> MongoDB.Driver.IMongoCollectionExtensions.AsQueryable(MongoDB.Driver.IMongoCollection 1)".

+0

Ten sam błąd wystąpił przy aktualizacji do wersji 2.3.0, a ja zmieniłem wersję na 2.2. 4, działa ponownie. Być może jest to błąd w wersji 2.3.0. – zhimin

0

trzeba podać

using MongoDB.Driver.Linq;