2013-03-02 64 views
1

鑑於此文檔類:RavenDB查詢使用LINQ和枚舉

public class Tea 
{ 
    public String Id { get; set; } 

    public String Name { get; set; } 

    public TeaType Type { get; set; } 

    public Double WaterTemp { get; set; } 

    public Int32 SleepTime { get; set; } 
} 

public enum TeaType 
{ 
    Black, 
    Green, 
    Yellow, 
    Oolong 
} 

我存儲與下面的代碼的新茶:

using (var ds = new DocumentStore { Url = "http://localhost:8080/" }.Initialize()) 
using (var session = ds.OpenSession("RavenDBFirstSteps")) 
{ 
    Tea tea = new Tea() { Name = "Earl Grey", Type = TeaType.Black, WaterTemp = 99d, SleepTime = 3 }; 
    session.Store(tea); 
    session.SaveChanges(); 
    Console.WriteLine(tea.Id); 
} 

茶將會成功保存,但是當我嘗試用linq查詢所有紅茶,我沒有得到任何結果:

using (var ds = new DocumentStore { Url = "http://localhost:8080/" }.Initialize()) 
using (var session = ds.OpenSession("RavenDBFirstSteps")) 
{ 
    var dbTeas = from teas in session.Query<Tea>() 
        where teas.Type == TeaType.Black 
        select teas; 

    foreach (var dbTea in dbTeas) 
    { 
     Console.WriteLine(dbTea.Id + ": " + dbTea.Name); 
    } 
} 

我也試着將Enum保存爲Integer與t他下面的命令:

ds.Conventions.SaveEnumsAsIntegers = true; 

但是,結果是一樣的。所有的作品,當我使用名稱或WaterTemp。 RavenDB是以這種方式支持枚舉還是完全錯誤?

+0

不應該TeaType是int? – 2013-03-02 14:47:57

+0

@ColinPear從C#的角度來看,枚舉TeaType在內部是一個int。 – Kai 2013-03-02 14:50:26

+0

我明白了。我一直對這個道具的名字感到困惑 – 2013-03-02 14:54:56

回答

1

看來我得到了答案。始終不建議使用類型名稱的屬性,類型可以是保留關鍵字。

我改名型和一切正常,所以答案是:

public class Tea 
{ 
    public String Id { get; set; } 

    public String Name { get; set; } 

    public TeaType TeaType { get; set; } 

    public Double WaterTemp { get; set; } 

    public Int32 SleepTime { get; set; } 
} 
+0

它改名?我不知道在哪裏... – 2013-03-02 16:10:49

+0

@MattJohnson哦,對不起,我複製了錯誤的代碼。現在,這是正確的。 – Kai 2013-03-02 16:13:30

+0

很高興你的工作。 :) – 2013-03-02 16:25:10