问题标签 [iqueryable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 你如何存根 IQueryable.哪里(功能) 与犀牛模拟?
在我现在正在处理的 .net 3.5 项目中,我正在为服务类编写一些测试。
我很难弄清楚如何存根或模拟
部分。
这是我到目前为止得到的:
[注:类名已更改以保护无辜]
但这失败System.NullReferenceException
了
所以我的问题是:
如何使用 RhinoMocks 模拟或存根 IQueryable.Where 函数并让此测试通过?
如果我当前的设置不允许我模拟或存根 IQueryable,那么请给出合理的解释。
感谢您阅读这个冗长的问题。
linq - 强制执行 IQueryable?
我有一个我想在 IQueryable 上执行的“没有转换为 SQL”的方法,有没有办法强制 IQueryable 执行而不必将它存储在某个中间类中?
linq-to-sql - IQueryable、Where、Guid 和
我正在通过 MVC Storefront 代码工作,并尝试在 dbml/data 上下文之外遵循存储库、服务和 poco 模型的路径。实际上这很容易理解,直到我开始编写测试并且事情以我不理解的方式失败。
在我的例子中,主键是一个 uniqueidentifier 而不是一个 int 字段。存储库返回一个 IQueryable:
在这种情况下,Restaurant 当然是 Models.Restaurant,而不是 _context.Restaurants.Restaurant。
针对 All() 在服务类(或存储库单元测试)中过滤,这正如预期的那样工作:
这工作得很好,有一个 Model.Restaurant。现在,如果我用 pkid 尝试同样的事情:
如果失败:
如果看到一些类似的帖子,人们说这是因为 r => r.Id is [Model.Restaurants] 是 linq2sql 层不知道的类级别。对我来说,这意味着第一个版本也不应该工作。当然,如果我的 pk 是一个 int,它就可以正常工作。
这里到底发生了什么?上帝知道,有一份工作,一份不工作并不是很直观。我有什么误解?
c# - LINQ 到 resx 文件?
我正在尝试构建一种方法来.resx
在运行时获取给定文件中给定文本的密钥。
目前,我可以打开并读取文件(Using ResXResourceReader
),但我必须使用 aforeach
来查看整个文件。
这可能是一个性能问题,因为我们的一些.resx
文件相当大(大约 2000 个字符串)并且我们可能经常这样做。
我想使用 LINQ to Objects 来查询这个,因为我认为该where
方法是相对优化的,但是我一直无法这样做。该类ResXResourceReader
有两个方法AsQueryable()
和GetEnumerator()
,但都不允许 LINQ 针对它们的结果(因此from n in reader.AsQueryable() where
失败)。
我如何针对 LINQ 提供的东西进行 LINQ ResXResourceReader
,或者它是否值得花时间?
linq-to-sql - 如何在不知道其类型的情况下在 C# 3.0 中返回 IQueryable?
我有一种执行查询 SQL 的方法(我正在使用 Linq to SQL,但我必须执行经典的 SQL 查询),但我不知道将从哪个表/实体生成此查询。
所以,我在想,因为我不知道查询将从哪个表生成,我不知道我的 IQueryable 的类型,对吗?
但我不知道如何退货IQueryable
?我试图返回<T>
,但它不起作用。
谢谢!
asp.net-mvc - 我应该如何延迟生成缩略图?
作为背景,我有一个数据层和服务层,松散地基于Rob Conery 的店面模型,就像 Rob 的一样,我的许多域对象都用LazyList<>
's 和LazyItem<>
's 链接,以利用 Linq2Sql 提供的延迟执行,因为我的Lazy*
类型利用IQueryable<T>
而不是这种令人敬畏的委托方法。
所以我有一个像这样的对象图(基本上,每个活动都应该有一个包含许多图像的照片库 - 缩略图和全尺寸照片):
该Gallery
类型具有 Images 属性,LazyList<PhotoGalleryImage>
因此IList<PhotoGalleryImage>
LazyList 就是Inner
您所看到的。每个PhotoGalleryImage
项目都有一个FullImage
属性和一个Thumbnail
属性,两者都是 type Image
。
这个想法是将完整的 rez 上传照片存储在PhotoGalleryImage.FullImage
属性中,最初,Thumbnail
属性是Null
. 我要的是:当Thumbnail
第一次访问该属性时,如果Null
我希望我的服务层生成 Thumb,将其保存到数据库,然后返回Image
较小照片的实例。我拥有从全尺寸图像创建缩略图的所有代码,所以这不是这里的问题。
我想不通的是如何捕获Thumbnail
属性的第一次访问(在我的IQueryable<>
架构上下文中),然后让服务层进行调整大小而不是存储库(DAL)。我强烈认为服务(业务)层应该负责这个功能决策,但我不知道如何使它工作。
目前,我正在考虑从存储库中的域类到 Linq2Sql 类的映射将是识别我所指的这种“首次访问”的好地方,但我不知道较低层如何调用服务层并执行收缩(或者即使可以,也应该这样做)。
也许我的设计限制了我让 Repos 进行转换。也许我根本不希望服务层执行这个逻辑。也许我的设计太可怕了,我真的不应该面对这个烂摊子。
请帮忙。感谢所有反馈。
c# - IQueryable Where 扩展方法与 Or's
复制:
我想遍历一个字符串值数组并构建一个 linq 表达式
列表中的每个项目都是 OR'ed 在一起的。
上面的代码搜索“A” AND “B” AND “C”
我想搜索“A”或“B”或“C”。
我知道如何使用 Linq 做到这一点,但我想使用扩展方法来完成同样的事情。
c# - 扩展 IQueryableWhere() 作为 OR 而不是 AND 关系
我正在使用自己的 IQueryable<> 扩展方法来创建可链接的查询,例如 FindAll().FindInZip(12345).NameStartsWith("XYZ").OrderByHowIWantIt() 等,然后在延迟执行时根据我的扩展方法链。
但问题在于,扩展链中的所有 Where (FindXYZ、FindInZip 等)将始终组合为 AND,这意味着我不能做这样的事情:
FindAll().FirstNameStartsWith("X").OrLastNameStartsWith("Z") 因为我不知道如何在单独的 Where 方法中注入 OR。
知道如何解决这个问题吗?
额外的; 到目前为止,我了解如何将表达式链接为 Or 如果我包装它们(例如 CompileAsOr(FirstNameStartsWith("A").LastNameStartsWith("Z").OrderBy(..)))
我正在尝试做的事情稍微复杂一些(并且 PredicateBuilder 在这里没有帮助..)因为我希望稍后的 IQueryable 基本上访问之前建立的 Where 条件,而不必包装它们来创建 Or between他们。
由于每个扩展方法都返回 IQueryable<> 我知道它应该了解某处查询条件的当前状态,这使我相信应该有一些自动化的方式或在所有先前的 Where 条件中创建一个 Or 而不必包装你想要什么或'd。
asp.net - 如何缓存 IQueryable 对象?
我有这个方法可以为“UserStatus”表中的所有行返回一个 Linq-to-SQL 查询:
这只是一个几乎不会改变的查找表,所以我想缓存结果。我可以将它转换为 aList<>
并缓存它,但我更愿意返回一个 IQueryable 对象,因为类中的其他方法依赖于它。任何人都可以帮忙吗?谢谢。
linq-to-sql - 如何在不将 IQueryable 暴露给我的应用程序的其余部分的情况下编写一个干净的存储库?
所以,我已经阅读了关于 SO 的所有问答,关于是否将 IQueryable 暴露给你的项目的其余部分(见这里和这里),我最终决定我不想要将 IQueryable 暴露给除我的模型之外的任何东西。因为 IQueryable 与某些持久性实现相关联,所以我不喜欢将自己锁定在其中的想法。同样,我不确定我对调用链下游的类修改不在存储库中的实际查询的感觉有多好。
那么,是否有人对如何在不这样做的情况下编写干净简洁的存储库有任何建议?我看到的一个问题是,我的存储库会因为我需要过滤查询的各种方法而爆炸。
拥有一堆:
如果我允许传递 IQueryable,我可以轻松地拥有一个看起来像这样的通用存储库:
但是,如果您不使用 IQueryable,则 GetAll() 之类的方法实际上并不实用,因为延迟评估将不会发生。我不想返回 10,000 条记录,以后只使用其中的 10 条。
这里的答案是什么?在Conery 的 MVC Storefront中,他创建了另一个称为“服务”层的层,该层从存储库接收 IQueryable 结果并负责应用各种过滤器。
这是我应该做的,还是类似的事情?让我的存储库返回 IQueryable,但通过将其隐藏在一堆过滤器类(如 GetProductByName)后面来限制对它的访问,这些过滤器类将返回像 IList 或 IEnumerable 这样的具体类型?