2014-06-12 6 views
7

पर asqueryable ऐसा नहीं कर सकते मैं दो मॉडल, एक उपयोगकर्ता और नीचे के रूप में एक टीम है: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; } 

तो मैं एक उपयोगकर्ता बना लिया है, लेकिन अब मैं अपने उपयोगकर्ता के लिए टीमों जोड़ना चाहते हैं। इस कोड मैं का उपयोग कर रहा है:

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

लेकिन मैं इन त्रुटियों को मिलता है जब मैं इस कार्य करें:

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' के लिए एक विस्तार विधि है की जरूरत है IEnumerable '' नहीं आप एक बनाने के लिए होगा या शायद पहले से ही –

उत्तर

9

आप एक नाम स्थान याद कर रहे हैं , MongoDB.Driver.Linq, बस इसे शीर्ष पर जोड़ें:

using MongoDB.Driver.Linq; 

कि विशिष्ट विधि है:

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

मैं जोड़ा मोंगो के लिए एक LINQ विस्तार वर्ग है MongoCollection' कि लेकिन अब यह कहते हैं: त्रुटि ऑपरेटर '==' के प्रकार 'MongoDB.Bson.ObjectId' और 'वस्तु' \t पंक्ति var उपयोगकर्ता पर ऑपरेंड के लिए लागू नहीं किया जा सकता = collection.AsQueryable() पहले। (ओ => o._id == सत्र ["आईडी"]); –

+2

@DanielGustafsson यह एक अलग समस्या है पूरी तरह से। वास्तव में _id ऑब्जेक्ट आईडी और सत्र ["आईडी"] एक वस्तु है। यदि आप सुनिश्चित हैं कि यह वास्तव में एक ऑब्जेक्ट आईडी है तो इसे कास्ट करें: o._id == (ऑब्जेक्टआईडी) सत्र ["आईडी"] – i3arnon

1

मैं नेट चालक v2.3.0 के साथ साथ एक ही त्रुटि हो रही थी। मैंने इसे हटा दिया और NuGet का उपयोग करके v2.2.4 स्थापित किया और यह काम किया। त्रुटि जो मैंने प्राप्त की: विधि नहीं मिली: 'MongoDB.Driver.Linq.IMongoQueryable 1<!!0> MongoDB.Driver.IMongoCollectionExtensions.AsQueryable(MongoDB.Driver.IMongoCollection 1)'।

+0

जब मैं 2.3.0 में अपग्रेड करता हूं, तो मुझे आपके साथ एक ही त्रुटि मिलती है, और मैं 2.2 पर वापस आ जाता हूं। 4, यह फिर से काम करता है। यह संस्करण 2.3.0 के साथ एक बग हो सकता है। – zhimin

0

आप शामिल करना

using MongoDB.Driver.Linq;