c# - 具有不同 LINQ 语法的 Raven Db 似乎无法正常工作

标签 c# ravendb

我刚刚开始使用 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 处理中。

请注意,另一种强制查询的其余部分在 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,但这实际上是一个空操作。)

关于c# - 具有不同 LINQ 语法的 Raven Db 似乎无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516141/

相关文章:

RavenDB 空间过滤器

c# - 在运行时暂停当前进程中的所有线程

c# - 如何在Python中将字符串转换为16位无符号整数?

c# - 从 C# 调用 C++ dll 函数

indexing - 如何在 RavenDB 中查询嵌套信息?

database - RavenDB 是否适合这个概念?

asp.net-mvc - RavenDB-如何在生产中使用多个插入?

c# - 有没有办法获取属性代码里面的实例类?

c# - 在 Windows CE 上接收 UDP 单播视频流

ravendb - 你能访问 RavenDB 文档 session 的统计信息吗