[英]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.