iqueryable 相关问题

.NET Framework Interface,提供评估针对特定数据源的查询的功能,其中未指定数据类型。

迁移到 .NET 9 后,我在 Select 语句中遇到 `string.Join` 问题

以前,当我使用 .NET 8 时,我可以在 IQueryable 的 Select 语句中使用 String.Join,如以下代码所示: var receiveTransactions =等待repository.Context.Set 以前,当我使用 .NET 8 时,我可以在 String.Join 语句中使用 Select 来表示 IQueryable,如以下代码所示: var receiveTransactions = await repository.Context.Set<ReceiveTransaction>() .Select(x => new ThirdPartyTransactionReportModel { Date = x.Created, Customer = string.Join(" - ", x.CustomerIdentity.Customer.Name, x.CustomerIdentity.Customer.Type, x.CustomerIdentity.Customer.Nationality.Name), }) .ToListAsync(); 但是,升级到.NET 9后,我遇到了错误: 表达式树不能包含引用结构或受限类型“ReadOnlySpan”的值。 请向我提供任何解决方案或替代方案来解决此问题。 这是一个已知问题,有几个相关提及: github.com/dotnet/roslyn/issues/73743 github.com/dotnet/roslyn/issues/74030 要解决此问题,请尝试显式指定数组重载变体: var receiveTransactions = await repository.Context.Set<ReceiveTransaction>() .Select(x => new ThirdPartyTransactionReportModel { Date = x.Created, Customer = string.Join(" - ", new[] { x.CustomerIdentity.Customer.Name, x.CustomerIdentity.Customer.Type, x.CustomerIdentity.Customer.Nationality.Name }), }) .ToListAsync();

回答 1 投票 0

仅当返回类型为 IQueryable 时,Azure MobileApp 控制器才返回 500

我的天蓝色移动应用程序后端呈现出奇怪的行为。 如果我的控制器操作返回 IQueryable 并且实体类型具有导航属性,则它返回 500。 一个简单的例子:...

回答 1 投票 0

如何使用 IQueryable 获得异步响应?

我收到警告消息 此异步方法缺少“await”运算符,并且将同步运行。考虑使用“await”运算符来等待非阻塞 API 调用,或使用“await Task.Run(...)”来执行 CPU-

回答 1 投票 0

如何使用Dapper实现分页?

我正在使用 Dapper ORM,并且正在查询 Posts 表。 我想获得分页结果。 如何使用 Dapper 获取分页结果?有帮助者吗? Dapper Query 可以返回 IQueryable 吗?

回答 9 投票 0

对对象的 MVC4 linq 查询未显示为正确的对象

错误:传递到字典中的模型项的类型为“System.Data.Entity.Infrastruct.DbQuery”(snip)...正在寻找“Advocate”类型 控制器方法如下所示: [http获取] 公开

回答 3 投票 0

C# / Entity Framework Core:IQueryable 在可查询分数列表中获取分数的理论排名,无需实例化列表

tl;dr,我有一个已排序的 IQueryable 用户分数,我想获得一次尝试的排名(可能在也可能不在 IQueryable 中)。 我有一个类尝试代表我的视频尝试...

回答 1 投票 0

C# EntityFramework IQueryable 在可查询分数列表中获取分数的理论排名,无需实例化列表

tl;dr,我有一个已排序的 IQueryable 用户分数,并且我想获得尝试的排名(可能会或可能不会在 IQueryable 中) 我有一个类尝试代表我的视频游戏的尝试...

回答 1 投票 0

带有字符串和日期的动态 IQueryable 格式

我不确定在动态 iqueryable 中使用字符串和日期作为变量的正确格式。对于数字,即使它们作为字符串传递,它也可以正常工作。但是,如果我使用字符串或...

回答 1 投票 0

C# .NET Core 6.0 - 创建 IQueryable 时使用 Select 很慢,为什么?

我们有一个数据层。该数据层内部是代表各种表/列的模型。这些模型还与其各自的 DbContext(称为 OurDbContext)相关联。 公共课 Foo ...

回答 1 投票 0

C# .NET Core 6.0 - 创建 IQueryable 时使用 Select 正在执行 SQL,如何获得延迟执行?

我们有一个数据层。 该数据层内部是代表各种表/字段的模型。 这些模型还与其各自的 DbContext 相关联(我们将其称为 OurDbContext)。 公共课...

回答 1 投票 0

从 IQueryable 生成缓存键以缓存 EF Code First 查询的结果

我正在尝试为我的 EF 存储库实现一种类似于此处博客中的缓存方案。 正如作者和评论者所报告的,局限性在于密钥生成方法无法...

回答 4 投票 0

IQueryProvider.CreateQuery 需要执行什么验证才能确保它可以计算表达式参数?

来自 IQueryProvider.CreateQuery 方法的文档: 创建查询(表达式): 构造一个可以评估查询的 IQueryable 对象 由指定的表达式树表示。 怎么...

回答 1 投票 0

I可按两个或多个属性查询顺序

我目前正在使用 IQueryable OrderBy 方法订购自定义对象列表,如下所示: mylist.AsQueryable().OrderBy("PropertyName"); 现在我想按多个排序

回答 4 投票 0

如何将 IQueryable 转换为“表达式”<Func" to provide Projection list to NHibernate QueryOver?

请参考以下代码: 使用(ISession会话= SessionFactory.OpenSession()) { //情况 1:使用 Query = 效果很好。 IList listMaster = session.Query 请参考以下代码: using(ISession session = SessionFactory.OpenSession()) { //Case 1: using Query = works fine. IList<MasterDto> listMaster = session.Query<MasterEntity>() .ProjectTo<MasterDto>(autoMapperConfig) .ToList(); //Case 2: using QueryOver = how to achieve same result as above? IQueryable<MasterDto> masterDtos = session.Query<MasterEntity>() .ProjectTo<MasterDto>(autoMapperConfig); IList<MasterEntity> list = session.QueryOver<MasterEntity>() .Select(masterDtos)//This of-course does not work .List(); } 如果我在案例 2 中注释 Select(masterDtos),以上两种情况都会返回相同的结果。其他区别是生成的 SQL 查询。 在上面的情况 1 中,生成的 SQL 仅包含 Dto 中存在的列。它会跳过 Entity 中存在但 Dto 中不存在的附加列。这对于提高 SQL 查询性能是必要的。 传递给 autoMapperConfig 方法的 ProjectTo 参数有 AutoMapper.MapperConfiguration 的实例。 案例 1 工作正常。 但是我有大量使用 QueryOver 的遗留代码。 将此代码从 QueryOver 迁移到 Query NHibernate API 非常困难且容易出错。 所以,我正在考虑如何使用 QueryOver 来实现这一目标(选择选定的列)。 我已经知道的一种方法是使用 Select 和/或 SelectList 的 QueryOver 方法并向其传递适当的参数。 这会工作得很好;但这种方法几乎没有问题: 我必须输入每个投影/表达式作为这些方法的输入。 如果我以后更改 Dto,我应该记得更改投影列表。 所以,我在想上面代码中提到的一些事情。这可能吗?还有其他类似/更简单的解决方案吗? Query和QueryOver是两个不同的东西。他们以不同的方式工作。对于 QueryOver,您必须使用 Select 和/或 SelectList 的 QueryOver 方法,正如您在问题中指出的那样。 对于 Query(返回 IQueryable),ProjectTo 接受类型为 IConfigurationProvider 的参数,您将其作为 autoMapperConfig 提供。因此,你的第一个案例有效。 您的第二种情况完全错误,因为传递给 Select 方法的参数与类型不匹配。 以下代码与您的第一个案例类似并且可以正常工作: var autoMapperConfig = new MapperConfiguration ( cfg => { cfg.CreateProjection<MasterEntity, MasterDto>(); cfg.CreateProjection<DetailEntity, DetailDto>() .ForMember(dto => dto.MasterData, conf => conf.MapFrom(ol => ol.Master.MasterData)); cfg.CreateProjection<DetailEntity, DetailMiniDto>(); } ); using(ISession session = SessionFactory.OpenSession()) { IList<MasterDto> listMaster = session.Query<MasterEntity>() .Where(x => x.MasterId == 1) .ProjectTo<MasterDto>(autoMapperConfig) .ToList(); IList<DetailDto> listDetail = session.Query<DetailEntity>() .Where(x => x.Master.MasterId == 1) .ProjectTo<DetailDto>(autoMapperConfig) .ToList(); } 以下是MasterEntity、MasterDto和MasterMap: public class MasterEntity { public virtual int MasterId { get; set; } public virtual string MasterData { get; set; } public virtual IList<DetailEntity> DetailList { get; set; } } public class MasterDto { public string MasterData { get; set; } public IList<DetailMiniDto> DetailList { get; set; } } internal class MasterMap : ClassMapping<MasterEntity> { public MasterMap() { Table("MasterTable"); Id(x => x.MasterId, im => { im.Column("MasterId"); im.Generator(Generators.Identity); }); Property(x => x.MasterData, map => { map.Type(TypeFactory.GetAnsiStringType(5)); }); Bag ( x => x.DetailList, map => { map.Key(k => k.Column("MasterId")); }, rm => rm.OneToMany() ); } } 以下是DetailEntity、DetailDto、DetailMiniDto和DetailMap: public class DetailEntity { public virtual int DetailId { get; set; } public virtual string DetailData { get; set; } public virtual MasterEntity Master { get; set; } } public class DetailDto : DetailMiniDto { public string MasterData { get; set; } } public class DetailMiniDto { public int DetailId { get; set; } public string DetailData { get; set; } } internal class DetailMap : ClassMapping<DetailEntity> { public DetailMap() { Table("DetailTable"); Id(x => x.DetailId, im => { im.Column("DetailId"); im.Generator(Generators.Identity); }); Property(x => x.DetailData); ManyToOne(x => x.Master, map => { map.Column("MasterId"); map.Cascade(Cascade.None); }); } }

回答 1 投票 0

在c#中使用WhereIf进行多个条件

嗨,有人可以帮助我如何在 LINQ 中最好地使用 whereif,这里我有一个工作正常的代码,但我想用WhereIf 转换这个查询。 公共异步任务 LoadQuery(IEnumerable 嗨,有人可以帮助我如何最好地在 LINQ 中使用 whereif,这里我有一个可以正常工作的代码,但我想用WhereIf 转换此查询。 public async Task LoadQuery(IEnumerable<string> codes) { var query = _dBContext.QueryTable.Where(x => !x.InActive).AsQueryable(); if (codes!= null && codes.Any()) query = query.Where(x => codes.Contains(x.FirstCode) || query.Contains(x.SecondCode)); else query = query.Where(x => !x.HasException.HasValue); var data = query.ToList(); } 我已经尝试使用WhereIF enumerable 但没有成功。这是我关注的链接。 https://extensionmethod.net/csharp/ienumerable-t/whereif WhereIf 不太适合您的情况,原因有两个: 您在 if-else 上调用两个不同的函数,而 WhereIf 的构建是为了接受在满足某些 predicate 时执行的单个函数 (condition)。 WhereIf 是 IEnumerable<TSource> 的扩展方法,而您尝试将其用作 IQueryable<TSource> 的扩展方法。 如果你坚持的话,你必须为 IQueryable<TSource> 定义一个扩展方法,这样做时,只需将其定义为 WhereIfElse: public static class ExtensionMethods { public static IQueryable<TSource> WhereIfElse<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, bool> predicateIf, Func<TSource, bool> predicateElse) { if (condition) return source.Where(predicateIf).AsQueryable(); else return source.Where(predicateElse).AsQueryable(); } } 所以,假设 query 的类型是 IQueryable<Item>(将 Item 替换为您的实际类型): public async Task<List<Item>> LoadQuery(IEnumerable<string> codes) { var query = _dBContext.QueryTable.Where(x => !x.InActive).AsQueryable(); query = query.WhereIfElse( // condition codes != null && codes.Any(), // predicateIf (Item x) => codes.Contains(x.FirstCode) || codes.Contains(x.SecondCode), // predicateElse (Item x) => !x.HasException.HasValue ); var data = query.ToList(); return data; } 附注请注意,我更改了您的返回值,尽管仍然没有 await。 bool condition = codes!= null && codes.Any(); var data = _dBContext.QueryTable .WhereIf(condition, a=> codes.Contains(a.FirstCode) || codes.Contains(a.SecondCode)) .WhereIf(!condition, a=> !a.HasException.HasValue && !a.InActive).ToList(); 为 WhereIf 添加扩展方法,这里我们通过传递条件作为第一个参数和谓词作为第二个参数,为类型 Where 和 IEnumerable 扩展了 IQueryable。 public static class LINQExtension { public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, bool> predicate) { if (condition) return source.Where(predicate); else return source; } public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, bool>> predicate) { if (condition) return source.Where(predicate); else return source; } } 干杯:) bool condition = codes!= null && codes.Any(); var data = _dBContext.QueryTable .WhereIf(condition, a=> codes.Contains(a.FirstCode) || codes.Contains(a.SecondCode)) .WhereIf(!condition, a=> !a.HasException.HasValue && !a.InActive).ToList();

回答 3 投票 0

如何处理 Razor 页面报告的指南

我不知道从哪里开始。我有一个名为 Trip 的数据库表。在此表中,每行数据都有以下信息: 旅行ID 客户名称 取货日期时间 接人的地方

回答 1 投票 0

C# 动态 LINQ 包含使用数组仅计算第一个值

对于 C# 来说相对较新,开始使用动态 LINQ 来使用字符串过滤数据表适配器。我遇到的问题是,Where 子句似乎只评估字符串中的第一个值...

回答 3 投票 0

如何测试调用返回 IQueryable 的持久性方法的方法

我在一些地方读到,调用数据库返回 IQueryable 的方法是一个很好的实践,因为它允许使用 Select、Where 等方法在服务中扩展查询,并且

回答 1 投票 0

像引用类型一样修改 IQueryable 不起作用?

在 C# 中,在私有方法中修改对象很常见,因为它们通常是引用类型而不是值类型,例如: 公共无效主要() { var person = new Person(); 设置人员...

回答 2 投票 0

如何过滤 IQueryable 的 null 导航属性

假设我有 2 个简单模型(如下),其中“User”包含“UserDetail”的导航属性(一对一关系): 数据库 创建表 [dbo].[用户详细信息] ( [用户 ID] [int] NOT NULL PRI...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.