У меня есть следующий запрос Linq ... который выполняется правильно:
from t in Tasks
where LookupTaskStarted(t.TaskId) == true
select new
{
t.TaskId,
t.Number,
Started = LookupTaskStarted(t.TaskId)
}
Есть ли способ создать это как свойство в классе Linq-To-Sql? Или я всегда должен ссылаться на это так?





Все классы linq-sql создаются как частичные. Вы можете расширить и добавить это свойство.
У меня нет ответа на ваш вопрос, но есть предложение по рефакторингу. Вместо того, чтобы дважды вызывать LookupTaskStarted (), вы можете записать значение с помощью предложения let:
from t in Tasks
let started = LookupTaskStarted(t.TaskId)
where started
select new
{
T.TaskId,
t.Number,
Started = started
}
Написав это, я понял, что если вы фильтруете с помощью started, вам не нужно свойство Started, потому что все они будут истинными.
class MyTask
{
public int TaskId {get; set;}
public int Number {get; set;}
public bool Started {get; set;}
public MyTask(Task t)
{
TaskId = t.TaskId;
Number = t.Number;
Started = LookupTaskStarted(t.TaskId)
}
}
// :
// :
from t in Tasks
where LookupTaskStarted(t.TaskId) == true
select new MyTask(t);
Если бы я сделал это ... и добавил бы это как свойство, будет ли он запускать этот запрос каждый раз, когда я делаю выбор? Не уверен, что я захочу такие накладные расходы.