Зачем Linq нужен установщик для свойства объекта «только для чтения»? - PullRequest
5 голосов
/ 21 июля 2011

Я использую Linq DataContext.ExecuteQuery («некоторая инструкция sql») для заполнения списка объектов

var incomes = db.ExecuteQuery<IncomeAggregate>(sqlIncomeStatement(TimeUnit));

IncomeAggregate - это объект, который я создал для хранения результата записейэтого запроса.

Одним из свойств этого объекта является YQM:

public int Year { get; set; }
public int Quarter { get; set; }
public int Month { get; set; }

public string YQM 
{ 
    get { return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month); } 
}
... more properties

Все компилируется нормально, но когда он выполняет Linq, я получаю следующую ошибку:

Невозможно присвоить значение элементу 'YQM'.Он не определяет сеттер.

Но, разумеется, я не хочу его «устанавливать».Y, Q и M предоставляются запросом к базе данных.YQM НЕ предоставляется запросом.Нужно ли как-то изменить определение моего объекта?(Я только начал использовать Linq и все еще набираю скорость, так что это может быть очень просто)

Ответы [ 2 ]

6 голосов
/ 01 августа 2011

Ну, я наконец-то завелся, просто установив частный сеттер

public string YQM {
    get 
    { 
        return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month); 
    }

    private set { ;} 
}

Кажется, работает.

1 голос
/ 21 июля 2011

Linq предполагает, что свойства этого объекта являются значениями для загрузки из базы данных, и очевидно, что он не может установить свойство YQM, поскольку у него нет установщика.Попробуйте вместо этого сделать YQM методом:

public string YQM() 
{ 
    return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month);  
}
...