linq 相关问题

语言集成查询(LINQ)是一种Microsoft .NET Framework组件,它为.NET语言添加了本机数据查询功能。请在适当时考虑使用更详细的标签,例如[linq-to-sql],[linq-to-entities] / [entity-framework]或[plinq]

linq 连接两个数据表

我正在尝试使用 linq 连接两个数据表 查询是 out_dt =(从 dt1 中的 row1,dt2 中的 row2 其中 row1("id").ToString = row2("id").ToString 选择 row1).CopyToDatatable 呃...

回答 1 投票 0

如何使用 linq 过滤表?

我有如下数据表 金属 价值 银 5 银_参考 是 金子 2 黄金参考 氮 铁 氮 铁参考 氮 从这个数据表中我想像下面这样过滤 如果银,金,铁!= 'N' 和银...

回答 1 投票 0

C# 使用 LINQ 返回单个聚合值

我想使用 LINQ 从 IEnumerable 集合类获取总计。 我的集合类的精简版本是: 公共类 BrokerCcyValue { 公共字符串经纪代码; ...

回答 1 投票 0

如何在Linq框架中编写下面的Sql代码

我正在努力在 C# linq 功能中编写下面的 sql 查询 Select * from dbo.lockerData l join dbo.User u on l.Bid= u.Bid and ((l.pid =u.pid) or (u.pid=0)) where u.code=‘123’ 以上...

回答 1 投票 0

Ef core 是否会在加载 .Include 中的实体之前加载实体的所有属性?

我有一个实体,我拥有一个依赖于虚拟成员的属性。加载实体时,我将虚拟成员设置为 null,即使我已将其包含在 .Include 中。 我的实体

回答 1 投票 0

在.net中用作队列并保留顺序的列表

我想使用List作为队列。这是因为 List 在获取/插入数据时更加灵活。 我的问题是,当我使用如下所示的 Linq 操作(DistinctBy、Take)时,我是否仍然得到

回答 1 投票 0

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

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

回答 2 投票 0

如何在 EF Core 预加载中包含每个层次结构的表属性

考虑以下模型类: 公共抽象类A { 公共枚举 T { B_, C_, D_ } 公共 int Id { 得到;放; } 公共整数?父级 ID { 获取;放; } 公共A?父级 { 得到; ...

回答 1 投票 0

使用 postgresql 查询数据时未使用 Entity Framework Core `HasConversion` 属性配置

我通过 Npgsql 将实体框架与 Postgre 一起使用,映射到 Cashouts 表的 Cashout 类型配置的一部分涉及: 公共无效配置(EntityTypeBuilder 我通过 Npgsql 将实体框架与 Postgre 结合使用,映射到 Cashout 表的 Cashouts 类型配置的一部分涉及: public void Configure(EntityTypeBuilder<Cashout> builder) { builder.ToTable("Cashouts"); builder.ConfigureGuidEntity(); builder.Property(c => c.RecipientAccountId).IsRequired(); builder.Property(c => c.State).IsRequired().HasConversion( v => v!.Name, v => Enumeration.FromDisplayName<CashoutState>(v)); builder.HasIndex(e => e.State); builder.HasIndex(e => e.RecipientAccountId); builder.UseXminAsConcurrencyToken(); } Cashout类型定义如下: public class Cashout : GuidEntity { public int RecipientAccountId { get; set; } public string? RecipientAccountName { get; set; } public decimal Amount { get; set; } public string? Comment { get; set; } public CashoutState? State { get; set; } = CashoutState.Pending; public string? Reason { get; set; } public Cashout() { } public Cashout(Guid id) : base(id) { } } 并继承自 GuidEntity 类型: public abstract class GuidEntity : Entity<Guid> { protected GuidEntity() { Id = Guid.Empty; } protected GuidEntity(Guid id) { Id = id; } public DateTimeOffset CreatedOn { get; private set; } = DateTimeOffset.UtcNow; public DateTimeOffset? UpdatedOn { get; private set; } } 本身继承自Entity: public abstract class Entity<TKey> : IEntity<TKey>, IEquatable<Entity<TKey>> where TKey: struct { private readonly Lazy<int> _requestedHashCode; private readonly Lazy<int> _requestedTransientHashCode; public virtual TKey Id { get; protected set; } protected Entity() { _requestedHashCode = new Lazy<int>(() => Id.GetHashCode() ^ 31); _requestedTransientHashCode = new Lazy<int>(() => Guid.NewGuid().GetHashCode()); } public bool IsTransient() => EqualityComparer<TKey>.Default.Equals(Id, default); public override bool Equals(object obj) => Equals((obj as Entity<TKey>)!); public bool Equals(Entity<TKey> other) { if (other == null) { return false; } if (ReferenceEquals(this, other)) { return true; } if (other.IsTransient() || this.IsTransient()) { return false; } return EqualityComparer<TKey>.Default.Equals(other.Id, Id); } public override int GetHashCode() => IsTransient() ? _requestedTransientHashCode.Value : _requestedHashCode.Value; } State属性的类型是CashoutState: public abstract class CashoutState : Enumeration { public static CashoutState Transferred = new TransferredCashoutState(); public static CashoutState TransferFailed = new TransferFailedCashoutState(); public static CashoutState Withdrawn = new WithdrawnCashoutState(); public static CashoutState WithdrawalFailed = new WithdrawalFailedCashoutState(); public static CashoutState Pending = new PendingCashoutState(); public static CashoutState Cancelled = new CancelledCashoutState(); protected CashoutState(int id, string name) : base(id, name) { } private class TransferredCashoutState : CashoutState { public TransferredCashoutState() : base(1, nameof(Transferred)) { } } private class WithdrawnCashoutState : CashoutState { public WithdrawnCashoutState() : base(2, nameof(Withdrawn)) { } } private class WithdrawalFailedCashoutState : CashoutState { public WithdrawalFailedCashoutState() : base(3, nameof(WithdrawalFailed)) { } } private class TransferFailedCashoutState : CashoutState { public TransferFailedCashoutState() : base(4, nameof(TransferFailed)) { } } private class PendingCashoutState : CashoutState { public PendingCashoutState() : base(5, nameof(Pending)) { } } private class CancelledCashoutState : CashoutState { public CancelledCashoutState() : base(6, nameof(Cancelled)) { } } } 然后还有 Enumeration 类型的另一位继承: public abstract class Enumeration : IComparable { public string Name { get; private set; } public int Id { get; private set; } protected Enumeration(int id, string name) { Id = id; Name = name; } public override string ToString() => Name; public static IEnumerable<T> GetAll<T>() where T : Enumeration => typeof(T) .GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly) .Select(f => f.GetValue(null)).Cast<T>(); public override bool Equals(object obj) { if (!(obj is Enumeration otherValue)) return false; var typeMatches = GetType() == obj.GetType(); var valueMatches = Id.Equals(otherValue.Id); return typeMatches && valueMatches; } public override int GetHashCode() => Id.GetHashCode(); public static int AbsoluteDifference(Enumeration firstValue, Enumeration secondValue) => Math.Abs(firstValue.Id - secondValue.Id); public static T FromValue<T>(int value) where T : Enumeration => Parse<T, int>(value, "value", item => item.Id == value); public static T FromDisplayName<T>(string displayName) where T : Enumeration => Parse<T, string>(displayName, "display name", item => string.Equals(item.Name, displayName, StringComparison.InvariantCultureIgnoreCase)); private static T Parse<T, TValue>(TValue value, string description, Func<T, bool> predicate) where T : Enumeration => GetAll<T>().FirstOrDefault(predicate) ?? throw new InvalidOperationException($"'{value}' is not a valid {description} in {typeof(T)}"); public int CompareTo(object obj) => Id.CompareTo(((Enumeration)obj).Id); } 该配置适用于持久数据: var cashout = new Cashout { Amount = command.Amount, RecipientAccountId = command.RecipientAccountId, Comment = command.Comment, State = CashoutState.Pending }; dbContext.Cashouts.Add(cashout); dbContext.SaveChanges(); 但是当涉及到基于该状态查询数据时,它惨败,我分别尝试了: 查询给定的特定状态 var cancelledByState = await _dbContext.Cashouts.Where(x => x.State == CashoutState.Cancelled).FirstAsync(); 抛出: System.InvalidOperationException: The LINQ expression 'DbSet<Cashout> .Where(c => c.State.Name == __Cancelled_Name_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information. at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|8_0(ShapedQueryExpression translated, <>c__DisplayClass8_0& ) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, Expression expression, CancellationToken cancella tionToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken) 查询给定的特定状态名称 var cancelledByStateName = await _dbContext.Cashouts.Where(x => x.State.Name == CashoutState.Cancelled.Name).FirstAsync(); 抛出: System.InvalidOperationException: The LINQ expression 'DbSet<Cashout> .Where(c => c.State.Name == __Cancelled_Name_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information. at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|8_0(ShapedQueryExpression translated, <>c__DisplayClass8_0& ) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, Expression expression, CancellationToken cancella tionToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken) 查询给定的特定状态id var cancelledByStateId = await _dbContext.Cashouts.Where(x => x.State.Id == CashoutState.Cancelled.Id).FirstAsync(); 抛出: System.InvalidOperationException: The LINQ expression 'DbSet<Cashout> .Where(c => c.State.Id == __Cancelled_Id_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to eith er AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information. at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|8_0(ShapedQueryExpression translated, <>c__DisplayClass8_0& ) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, Expression expression, CancellationToken cancella tionToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken) 我想找到一种使用状态属性来查询 DbSet<Cashout> 的方法。 注 1:在使用内存模式时,它看起来就像一个魅力,但只要上下文绑定到实际的 postgresql 数据库服务器,就会像上面那样失败。 注 2:我还在 GitHub 上创建了 2 个问题: https://github.com/dotnet/efcore/issues/19589 https://github.com/npgsql/efcore.pg/issues/1199 我希望您已经解决了您的问题,但经过几个小时的研究,我发现如何在使用 HasConversion 时修复 LINQ 查询。基本上,您需要使用要转换的对象中带有隐式运算符的原始类型进行强制转换,请参阅这篇文章了解更多详细信息。 现在,如果您需要更复杂的类型,EF Core 8 中具有复杂类型。

回答 1 投票 0

使用 LinQ 通过Where子句对数据表进行左连接

我正在尝试使用LinQ对两个数据表执行左连接,其中有两个WHERE子句。这是代码片段: 我尝试过以下代码片段: var resultList = (来自

回答 1 投票 0

“子查询返回超过 1 个值。这是不允许的。”需要返回一组值

var range = this.dataStore.Query() .Range(p => new NotificationConfigurationViewModel(p, 来自 p.Events 中的 x,其中 !(x.Code == null || x.Code.Equa...

回答 3 投票 0

选择 XML 元素而不使用扩展方法

MSDN - System.Xml.XPath 扩展类说道: 使用这些方法会带来一些性能损失。使用 LINQ to XML 查询可产生更好的性能。 XPathSelectElement 是一个

回答 1 投票 0

如何根据 XDocument 的子节点对 XDocument 父节点进行排序?

在 C# 中,我尝试使用 OrderByDescending 对 XDocument 进行排序。目标是读取包含日期/时间戳的子节点之一并对父节点重新排序。 我从保存的 XML 加载...

回答 2 投票 0

如何消除生成的 SQL 查询中的嵌套连接?

我在 .NET Core 应用程序中创建了一个 LINQ 查询来检索一些数据。在检查 LINQ 生成的 SQL 时,我注意到其中有嵌套查询。我想通过删除

回答 1 投票 0

无法更改文本框值

我将值从一种表单传递到另一种表单,第二种表单的值来自 DataGridView。我可以看到它在以第一种形式调试时完美地传递了数据,并执行如下操作: 公开表格1...

回答 1 投票 0

两个集合中的任何交集

我必须找出两个集合是否有交集,我这样做的方法是使用LINQ的“Join”来获取两个集合的交集,然后我使用“Any”。但我...

回答 5 投票 0

在 C# EF Core 中,如何连接两个 DbSets

在 DbContext 中的 IQueryable 属性中连接两个 DbSet 时出现异常。 我努力了: 公共 DbSet 组 { set;得到; } 公共 DbSet 聊天 { set;得到; } p...

回答 1 投票 0

合并重叠的时间间隔?

我有以下内容: 公开课间隔 { 日期时间开始; 日期时间结束; } 我有一个包含多个间隔的 List 对象。我正在尝试实现以下目标(我使用了

回答 6 投票 0

ASP.NET Core / EF Core / Mysql - 如何按周分组?

我是 ASP.NET Core 新手,正在开发一个项目,需要使用 Entity Framework Core (EF Core) 和 MySQL 数据库按周对数据进行分组。但是,我遇到了分组问题...

回答 1 投票 0

在 ASP.NET Core MVC Web 应用程序中显示与每种类型对应的电影列表时遇到问题

我正在使用 C# 和实体框架开发 ASP.NET Core MVC Web 应用程序。我有一个带有 GenreId 属性的 Movie 类和一个带有 Id 属性的 Genre 类。我正在尝试显示

回答 1 投票 0

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