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, Object)\r\n в System.Linq .Lookup2.Create[TSource](источник IEnumerable1, Func2 keySelector, Func2 elementSelector, компаратор IEqualityComparer1)\r\n в System.Linq.GroupedEnumerable3.GetEnumerator()\r\n в System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() \r\n в System.Collections.Generic.List1..ctor(коллекция IEnumerable1)\r\n в System.Linq.Enumerable.ToList[TSource](источник IEnumerable1)\r \n в System.Linq.Dynamic.Core.DynamicEnumerableExtensions.ToDynamicList(источник IEnumerable) в C:\Users\Jonathan\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableExtensions. cs: строка 87 TargetSite: {System.Object DynamicIndex (System.Object, System.String)}


person user2487948    schedule 20.10.2020    source источник


Ответы (1)


Вы уверены, что ваш код выдает ошибку, потому что при запуске этого кода в 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();
}

Результат выглядит так:

введите здесь описание изображения

person Stef Heyenrath    schedule 25.10.2020