【发布时间】: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