#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);