簡體   English   中英

具有不同LINQ語法的Raven Db似乎不起作用

[英]Raven Db with different LINQ syntax doesn't appear to be working

我剛開始使用RavenDB並遇到了一個奇怪的場景。

當我運行以下查詢時,模型填充得很好。 一切都很好。

var contacts = Session.Query<Contact>()
                      .Where(c => c.UserId == this.userId)
                      .ToList();

var model = contacts.Select(c => new SelectListItem() { 
                                     Text = c.FullName, 
                                     Value = c.Id }).ToList();

但是,這不是我開始使用的代碼。 我從下面的代碼開始,它從聯系人FullName填充Text屬性。 由於某些隨機原因,它不會從聯系人ID填充Value屬性。

 var model = (from c in Session.Query<Contact>()
              where c.UserId == this.userId
              select new SelectListItem() { 
                         Text = c.FullName, 
                         Value = c.Id }).ToList();

我不確定這是一個錯誤還是我只是遺漏了一些簡單的東西。 想法?

**更新**

它也不喜歡這種語法。 我必須在這里遺漏一些非常基本的東西。

 var model = Session.Query<Contact>()
                    .Where(c => c.UserId == this.userId)
                    .Select(c => new SelectListItem() { Text = c.FullName, Value = c.Id })
                    .ToList();

不同之處在於,在第一種情況下,您在投影之前已經進行了ToList()調用。 因此,LINQ提供商唯一需要擔心的是Where調用。 它將獲取每個Contact 所有數據,然后在LINQ to Objects中進行投影。

在你的第二個代碼中, Select調用也需要由LINQ提供程序處理 - 並且可能是它沒有做正確的事情。

所以是的,這聽起來像是RavenDB LINQ提供程序中的一個錯誤,在Select handling中。

請注意,強制其余查詢在LINQ to Objects中執行的另一種方法是使用AsEnumerable() - 所以這應該工作:

var model = Session.Query<Contact>()
                   .Where(c => c.UserId == this.userId)
                   .AsEnumerable()
                   .Select(c => new SelectListItem { 
                                  Text = c.FullName, 
                                  Value = c.Id })
                   .ToList();

(我已經將new SelectListItem()轉換為對象初始化表達式中的new SelectListItem ,但這實際上是一個無操作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM