#c#
#c#
Вопрос:
Я создал объект, который содержит другую коллекцию в одном из своих свойств.
Это основной объект:
public class MeterPrevReadInfo
{
public int JobMeterID { get; set; }
public string PreviousJobReference { get; set; }
public FuelType MeterFuelType { get; set; }
public List<MeterPrevReadRegInfo> Regs { get; set; }
public DateTime DateMeterRead { get; set; }
}
Это дочерний объект:
public class MeterPrevReadRegInfo
{
public string RegisterID { get; set; }
public string MeterRead { get; set; }
}
Мне нужно привязать этот объект к элементу управления repeater, я хотел бы показать свойство DateMeterRead и все свойства MeterRead в repeater.
Возможно ли это с помощью Linq? Я мог бы легко сделать это, используя запрос t-sql из базы данных, но я просто подумал, что это должно быть возможно сделать в памяти без дополнительных затрат на повторное обращение к базе данных.
Ответ №1:
Не запутывайтесь — LINQ не является уровнем доступа к данным или ORM (возможно, вы имеете в виду LINQ-to-SQL или LINQ-to-Entities?)
Вы абсолютно можете запросить коллекцию в памяти, используя LINQ, хотя ваши вопросы, похоже, относятся к базе данных.
Я мог бы легко сделать это, используя запрос t-sql из базы данных, но я просто подумал, что это должно быть возможно сделать в памяти без дополнительных затрат на повторное обращение к базе данных.
Вы можете извлечь все эти данные из базы данных в одном запросе, а затем создавать объекты. Вы можете сделать это с помощью хранимой процедуры, LINQ-to-SQL, Entity Framework или других инструментов. Вы должны выбрать лучший инструмент для ваших требований. Я ожидаю, что это очень небольшая часть требования, поэтому сделайте шаг назад, выберите лучший инструмент и выполните эту работу, используя этот инструмент.
Ответ №2:
уверен, что это возможно. Похоже, вы хотите что-то вроде этого:
List<MeterPrevReadInfo> list = ...;
var result = from item in list
from info in item.Regs
select new {item.DateMeterRead, info.MeterRead};
Этот запрос определяет список анонимных объектов с двумя нужными вам свойствами.
Ответ №3:
Вы можете получить доступ к анонимному объекту, представляющему нужную вам модель, используя метод расширения Linq Select
следующим образом:
var readInfo = new MeterPrevReadInfo();
readInfo.Regs.Select(x => new {
x.RegisterID,
x.MeterRead,
readInfo.DateMeterRead
});