none
using MongoDB.Driver.Linq 字串比較的問題 RRS feed

  • 問題

  • 我是第一次碰mongo DB

    資料裡面存了一個欄位 是字串  ex: "20140707"

    我的程式用 linq

    using MongoDB.Driver.Linq;

     var query1 = c.AsQueryable<PL>();

    .....

     query1 = query1.Where(A => Convert.ToInt32(A.YYMMDD) >= Convert.ToInt32(dtSs));

    就會出現  MONGODB driver 不支援Convert.toint32(....

    還有我用  query1 = query1.Where(A => A.YYMMDD == dtSs);  是可以的

    但不行用  query1 = query1.Where(A => A.YYMMDD >= dtSs);  是不可以的

    若把  var query1 = c.AsQueryable<PL>().AsEnumerable() ;

    就可以  只是速度變好慢

    有什麼方法可以解決呢?!


    • 已編輯 布利 2014年8月7日 上午 10:04
    2014年8月7日 上午 09:53

解答

  • 您好,
    參考

    http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/#getting-started-with-csharp-driver

    中的方式,可以用以下的方式,請您試看看。

    //using MongoDB.Driver;
    //using MongoDB.Bson;
    //using MongoDB.Driver.Builders;
    
    public class Entity
    {
    	public ObjectId Id { get; set; }
    	public string YYMMDD { get; set; }
    }
    
    //取值
    var connectionString = "mongodb://localhost";
    var client = new MongoClient(connectionString);
    var server = client.GetServer();
    var database = server.GetDatabase("test"); // "test" is the name of the database
    var collection = database.GetCollection<Entity>("entities");
    var query = Query<Entity>.GTE(e => e.YYMMDD, "20140707");


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 布利 2014年8月8日 上午 03:18
    2014年8月8日 上午 02:04

所有回覆

  • 我是第一次碰mongo DB

    資料裡面存了一個欄位 是字串  ex: "20140707"

    我的程式用 linq

    using MongoDB.Driver.Linq;

     var query1 = c.AsQueryable<PL>();

    .....

     query1 = query1.Where(A => Convert.ToInt32(A.YYMMDD) >= Convert.ToInt32(dtSs));

    就會出現  MONGODB driver 不支援Convert.toint32(....

    還有我用  query1 = query1.Where(A => A.YYMMDD == dtSs);  是可以的

    但不行用  query1 = query1.Where(A => A.YYMMDD >= dtSs);  是不可以的

    若把  var query1 = c.AsQueryable<PL>().AsEnumerable() ;

    就可以  只是速度變好慢

    有什麼方法可以解決呢?!


    我查一下 

    var query=fromeincollection.AsQueryable<Employee>()wheree.FirstName=="John"selecte;

    calling the AsQueryable method. After that it’s all standard LINQ.

    所以 mongodb 應該是用standard linq

    那為何不行字串比大小????


    • 已編輯 布利 2014年8月7日 上午 11:39
    2014年8月7日 上午 11:39
  • 試試看 string.compare(A.YYMMDD, dtSs) >= 0

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2014年8月7日 上午 11:41
  • 試試看 string.compare(A.YYMMDD, dtSs) >= 0

      這個  我今天有有試過  會出現錯誤
      意思大概說  mogodb driver not support string.compare  

     

    2014年8月7日 下午 12:48
  • 不同資料庫對 LINQ 的支援要看 LINQ Provider 的實作,MongoDB LINQ Provider 可能沒有實作那個。

    LINQ Provider 是由各家資料庫廠商負責。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年8月7日 下午 01:10
    版主
  • 我應該把問題再簡單問
    為何

    var query1 = c.AsQueryable<PL>();  用 iqueryable

    不能使用  Convert.toint32(....

    若改成

    var query1 = c.AsQueryable<PL>().AsEnumerable() ;

    就可以使用 Convert.toint32(....

    只是 AsEnumerable   的速度實在太慢了  ???

    2014年8月7日 下午 02:22
  • 您好,
    參考

    http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/#getting-started-with-csharp-driver

    中的方式,可以用以下的方式,請您試看看。

    //using MongoDB.Driver;
    //using MongoDB.Bson;
    //using MongoDB.Driver.Builders;
    
    public class Entity
    {
    	public ObjectId Id { get; set; }
    	public string YYMMDD { get; set; }
    }
    
    //取值
    var connectionString = "mongodb://localhost";
    var client = new MongoClient(connectionString);
    var server = client.GetServer();
    var database = server.GetDatabase("test"); // "test" is the name of the database
    var collection = database.GetCollection<Entity>("entities");
    var query = Query<Entity>.GTE(e => e.YYMMDD, "20140707");


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 布利 2014年8月8日 上午 03:18
    2014年8月8日 上午 02:04