2014-06-12 21 views
7

üzerinde AsQueryable yapamaz ben iki model, bir kullanıcı ve aşağıda bir takım var:mongodb koleksiyonu

[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; } 

Yani bir kullanıcı oluşturduk ama şimdi benim kullanıcıya ekipleri eklemek istiyorum. Bu kullanıyorum kodudur:

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" }); 

Ama bunu yaparken bu hataları alıyorum:

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'' için bir uzantısı yöntemidir eklemeniz gerekir IEnumerable 'değil' Eğer bir tane oluşturmak zorunda kalacak ya da belki Mongo için bir linq uzantısı sınıf zaten ekledi –

cevap

9

Bir ad eksik , MongoDB.Driver.Linq, basitçe üst kısmında söz konusu ekleyin:

using MongoDB.Driver.Linq; 

Yani belirli bir yöntemdir:

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

yoktur MongoCollection' o ama şimdi diyor ki: Hata 'MongoDB.Bson.ObjectId' ve 'nesne' hat var kullanıcı \t tip işlenenler için uygulanamaz operator '==' = collection.AsQueryable() İlk. (o => o._id == Oturum ["ID"]); –

+2

@DanielGustafsson Bu tamamen farklı bir sorun. Gerçekten _id, ObjectID ve Session ["ID"] bir nesnedir. Aslında bir ObjectID olduğundan emin değilseniz, o zaman onu dökün: o._id == (ObjectID) Oturum ["ID"] – i3arnon

1

Ben .NET sürücü v2.3.0 ile aynı hatayı başlamıştı. Onu kaldırdım ve NuGet kullanarak v2.2.4'ü kurdum ve işe yaradı. Aldığım hata: Yöntem bulunamadı: 'MongoDB.Driver.Linq.IMongoQueryable 1<!!0> MongoDB.Driver.IMongoCollectionExtensions.AsQueryable(MongoDB.Driver.IMongoCollection 1)'.

+0

Ben 2.3.0'a yükselttiğimde aynı hatayı aldım ve 2.2'ye geri dönüyorum. 4, yine çalışır. Bu sürüm 2.3.0 ile bir hata olabilir. – zhimin

0

Eğer

using MongoDB.Driver.Linq;