微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

System.Linq.Dynamic.Core-错误消息:“目标对象不是ExpandoObject”

如何解决System.Linq.Dynamic.Core-错误消息:“目标对象不是ExpandoObject”

当对集合(在下面的示例中为“数据”类型)执行GroupBy时,当我尝试转换为列表时,消息“目标对象不是ExpandoObject”会发生运行时错误错误是什么意思?我该如何传递这个错误

这里是一个导致运行时错误的示例调用-

data.AsQueryable()。GroupBy(groupingKeySelector,“ it”)。Select(选择器.Cast()。ToDynamicList()

下面提供的代码详细信息-

//data object is a list of defined class 'Data'.
public class Data {
        public string Currency { get; set; }
        public int PreTaxCost { get; set; }
}

//variable values: 
var groupingKeySelector = "new (it.Currency as Currency )" 
var selector = "new ( Sum(Convert.ToInt32(it.PreTaxCost)) as PreTaxCost,it.Key.Currency )" 


//Call that throws exception: data.AsQueryable().GroupBy(groupingKeySelector,"it").Select(selector).Cast().ToDynamicList()

//Variation of call that throws same exception data.AsQueryable().GroupBy("new (it.Currency as Currency )","it").First()

异常消息

data.AsQueryable()。GroupBy(groupingKeySelector,“ it”)。Select(selector).Cast()。ToDynamicList()'引发了类型为'system.invalidOperationException'的异常数据:{System.Collections.ListDictionaryInternal} HResult:-2146233079 HelpLink:null InnerException:null消息:“目标对象不是ExpandoObject”源:“ System.Linq.Dynamic.Core” StackTrace:“位于System.Linq.Dynamic.Core.Dynamic.DynamicIndex(对象obj,字符串名称)在C:\ Users \ Jonathan \ Documents \ GitHub \ System.Linq.Dynamic.Core \ src \ System.Linq.Dynamic.Core \ Dynamic \ DynamicIndexer.cs:行30 \ r \ n在lambda_method(Closure, System.Linq.Lookup2.Create [TSource]上的对象)\ r \ n(System.Linq.GroupedEnumerable3.GetEnumerator()\ r \ n在System.Linq.GroupedEnumerable3.GetEnumerator()\ r \ n在System.Linq.Lookup2.Create [TSource](IEnumerable1源,Func2 keySelector,Func2 elementSelector,IEqualityComparer1比较器)\ r \ n .Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()\ r \ n在System.Collections.Generic.List1..ctor(IEnumerable1 collection)\ r \ n在System.Linq.Enumerable.ToList [TSource](IEnumerable1源)\ r \ n位于C:\ Users \ Jonathan \ Documents \ GitHub \ System.Linq.Dynamic.Core \ src \ System.Linq.Dynamic中的System.Linq.Dynamic.Core.DynamicEnumerableExtensions.ToDynamicList(IEnumerable源)。 Core \ DynamicEnumerableExtensions.cs:line 87“ TargetSite:{System.Object DynamicIndex(System.Object,System.String)}

解决方法

您确定您的代码给出了错误,因为在LinqPad中运行此代码时:

public class Data
{
    public string Currency { get; set; }
    public int PreTaxCost { get; set; }
}

void Main()
{
    var groupingKeySelector = "new (it.Currency as Currency )";
    var selector = "new ( Sum(Convert.ToInt32(it.PreTaxCost)) as PreTaxCost,it.Key.Currency )";

    var data = new[]
    {
        new Data { Currency = "$",PreTaxCost = 5 },new Data { Currency = "$",PreTaxCost = 10 },new Data { Currency = "EURO",PreTaxCost = 20 },};

    var result = data.AsQueryable().GroupBy(groupingKeySelector,"it").Select(selector).ToDynamicList();
    result.Dump();
}

结果如下:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。