【问题标题】:Error on Selecting nested List of Objects with dynamic linq使用动态 linq 选择嵌套对象列表时出错
【发布时间】:2021-11-13 12:53:35
【问题描述】:

我正在尝试使用 c# 中的动态 linq 编写类型化动态投影方法。

我只想选择我的 Dtos 的某些字段,即使在我的示例中的 Useraddresses 等嵌套集合中也是如此。将为该查询生成选择所需列的字符串:

query.Select<Domain.UserManagement>("new Domain.UserManagement.Users.User{ Id, firstname, lastname, email, 
UserAddresses.Select(new Domain.UserManagement.UserAddresses.UserAddress{ Country})
 as UserAddresses }").ToDynamicArray()

当我执行这个时,我得到了

数据:{System.Collections.ListDictionaryInternal} H结果:-2147467261 帮助链接:空 内部异常:空 消息:“值不能为空。(参数'表达式')” 参数名称:“表达式” 来源:“System.Linq.Expressions” StackTrace: " 北 System.Dynamic.Utils.ContractUtils.RequiresNotNull(对象值, 字符串参数名称,Int32 索引)\r\n bei System.Dynamic.Utils.ExpressionUtils.RequiresCanRead(表达式表达式,字符串参数名称,Int32 idx)\r\n
北 System.Linq.Expressions.Expression.Bind(MemberInfo 成员, 表达式表达式)\r\n 北 System.Linq.Dynamic.Core.Parser.ExpressionParser.CreateNewExpression(List1 properties, List1 表达式, 类型 newType)\r\n北 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseNew()\r\n 北 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseIdentifier()\r\n 北 System.Linq.Dynamic.Core.Parser .ExpressionParser.ParsePrimaryStart()\r\n 在 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParsePrimary() 之后\r\n 在 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseUnary() 之后\r\n北 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseMultiplicative()\r\n 北 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseAdditive()\r\n 北 System.Linq.Dynamic.Core.Par ser.ExpressionParser.ParseShiftOperator()\r\n 在 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseComparisonOperator()\r\n 在 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLogicalAndOrOperator()\r\n n 贝 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseIn()\r\n 贝 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseAndOperator()\r\n 贝 System.Linq.Dynamic.Core。 Parser.ExpressionParser.ParseOrOperator()\r\n 在 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLambdaOperator()\r\n 在 System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseNullCoalescingOperator()\r\n n bei System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseConditionalOperator()\r\n bei System.Linq.Dynamic.Core.Parser.ExpressionParser.Parse(Type resultType, Boolean createParameterCtor)\r\n bei System.Linq .Dynamic.Core.DynamicExpressionParser.ParseLambda(Type delegateType, ParsingConfig parsingConfig, Boolean createParameterCtor, ParameterExpression[] 参数, Type resultTy pe,字符串表达式,Ob ject[] values)\r\n bei System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParsingConfig parsingConfig, Boolean createParameterCtor, ParameterExpression[] parameters, Type resultType, String expression, Object[] values)\r\n bei System .Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParsingConfig parsingConfig, Boolean createParameterCtor, Type itType, Type resultType, String expression, Object[] values)\r\n bei System.Linq.Dynamic.Core.DynamicQueryableExtensions.Select(IQueryable source , ParsingConfig config, String selector, Object[] args)\r\n bei System.Linq.Dynamic.Core.DynamicQueryableExtensions.Select(IQueryable source, String selector, Object[] args)" 目标站点:{Void RequiresNotNull(System.Object, System.String, Int32)}

public abstract class Entity<TKey> : ICreatable, IDeletable, IEntityBase<TKey>
{
    [Key]
    public TKey Id { get; set; }
    
    public DateTime CreatedAt { get; set; }
    public DateTime ModifiedAt { get; set; }
    public DateTime? DeletedAt { get; set; }
}

public class User : Entity<Guid>
{
    public Guid TenantId { get; set; }
    public virtual Tenant Tenant { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }        
    public virtual string Email { get; set; }


    public virtual ICollection<UserAddress> UserAddresses { get; set; } 
    public virtual ICollection<Role> Roles { get; set; }

}

    public class UserAddress : Entity<Guid>
{
    public Guid TenantId { get; set; }
    public virtual Tenant Tenant { get; set; }
    public Guid? UserId { get; set; }
    public string AddressType { get; set; }
    public string Street { get; set; }
    public string HouseNr { get; set; }
    public string Country { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }

}

【问题讨论】:

    标签: c# linq dynamic-linq


    【解决方案1】:

    问题是 用户类中的 ICollection UserAddresses 而不是 IEnumerable

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 2017-04-28
      • 2019-11-26
      • 2023-02-25
      • 2022-12-15
      相关资源
      最近更新 更多