Проблема с непатентованным перечислением IQueryable

StackOverflow https://stackoverflow.com/questions/621881

  •  05-07-2019
  •  | 
  •  

Вопрос

Использование динамического linq (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) Я запускаю приведенный ниже запрос, который возвращает IQueryable .Для этого результата, который также является IEnumerable, я могу запустить Count(), однако для получения значений нет функции ToList().Я могу перечислить их, используя foreach, но не могу получить доступ к отдельным полям в результирующем анонимном типе без отражения.Неужели это единственный способ?Спасибо

var query =
                db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
                OrderBy("CompanyName").
                Select("New(CompanyName as Name, Phone)");

            foreach (var item in query)
            {
                foreach (var prop in item.GetType().GetProperties())
                {
                    Console.WriteLine(prop);
                }
            }

Попробовал выполнить приведение, но получил ошибку, не удалось преобразовать объект типа 'DynamicClass1' в тип 'Test'.

 foreach (var item in query)
            {
                Console.WriteLine("{0}: {1}", ((Test)item).CompanyName, ((Test)item).Phone);
            }

public class Test {
            public string CompanyName { get; set; }
            public string Phone { get; set; }

}

Это было полезно?

Решение

Вы не можете ожидать, что тип вашего динамического объекта будет разрешен во время компиляции, когда ваш запрос будет разрешен во время выполнения.Вот что такое dynamic linq вообще :это позволяет вам выполнять динамические запросы за счет проверки во время компиляции.

Вы должны использовать отражение для доступа к свойствам динамического типа, по крайней мере, до C # 4.

Другие советы

Если IEnumerable не является универсальным, то вам следует использовать приведение, а не отражение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top