Привязка анонимного типа для создания списка привязок

#c# #generics

#c# #общие

Вопрос:

Я пытаюсь создать список привязок<> из анонимного типа, возвращаемого запросом LINQ, но список привязок<> не принимает анонимный тип, ниже приведен мой код

 var data = context.RechargeLogs.Where(t => t.Time >= DateTime.Today).
           Select(t => new 
           {
                col1 = t.Id,
                col2 = t.Compnay,
                col3 = t.SubscriptionNo,
                col4 = t.Amount,
                col5 = t.Time
           });

var tmp =  new BindingList<???>(data);
  

В последней строке общий аргумент, что разместить???

Ответ №1:

Вы можете написать метод расширения:

 static class MyExtensions
{
    public static BindingList<T> ToBindingList<T>(this IList<T> source)
    {
        return new BindingList<T>(source);
    }
}
  

и используйте его следующим образом:

         var query = entities
            .Select(e => new
            {
               // construct anonymous entity here
            })
            .ToList()
            .ToBindingList();
  

Комментарии:

1. Молодец, братан. Спасибо

Ответ №2:

Если вам нужно использовать этот объект в других местах, я бы предложил либо использовать dynamic , либо, что еще лучше, просто создать нужный вам объект как struct .

 public class RechargeLogData
{
    public int Id { get; set; }
    public string Company { get; set; }
    public string SubscriptionNo { get; set; }
    public string Amount { get; set; }
    public string Time { get; set; }
}

var data = context.RechargeLogs.Where(t => t.Time >= DateTime.Today).
       Select(t => new RechargeLogData()
       {
            Id = t.Id,
            Company = t.Compnay,
            SubscriptionNo = t.SubscriptionNo,
            Amount = t.Amount,
            Time = t.Time
       });

var tmp =  new BindingList<RechargeLogData>(data);
  

Комментарии:

1. я собираюсь привязать этот источник к datagrid, когда я обновляю RechargeLog, datagrid, я думаю, не будет обновляться

2. Вы пробовали это? Обновление DataGrid кажется другим вопросом. Пожалуйста, не стесняйтесь открывать новый, и мы сможем вам помочь.

3. -1 для изменяемой структуры с полями. Механизмы привязки не работают с полями. Типы значений не следует рассматривать как прямую замену ссылочных типов. Структуры должны быть неизменяемыми.

Ответ №3:

Самый низкий общий базовый тип, который используется вашими данными. Например, объект, если это так.

 var tmp =  new BindingList<object>(data);