Linq to SQL: добавить пользовательский столбец и порядок по нему? - PullRequest
0 голосов
/ 02 февраля 2009

Как я могу сделать что-то подобное в Linq to SQL (VB.NET, если это возможно)?

SELECT *, ISNULL(DueDate, DATEADD(year, 10, GETDATE())) AS DueDateForSorting 
FROM Tasks
ORDER BY DueDateForSorting

1 Ответ

2 голосов
/ 02 февраля 2009

Я не думаю, что поставщик SQL поддерживает добавление лямбда-столбцов в запрос. Тем не менее, он поддерживает оператор объединения, и, поскольку вы, по сути, делаете это:

SELECT * FROM Tasks
ORDER BY ISNULL(DueDate, DATEADD(year, 10, GETDATE()))

Попробуйте это:

from o in dc.Orders orderby o.DueDate ?? DateTime.Today.AddYears(10)

Если вам по какой-то причине необходимо, чтобы эта фиктивная будущая дата также присутствовала в вашем наборе результатов, вы можете изменить класс сущностей в файле LINQtoSQL designer.cs:

[Column(Storage="_DueDate", DbType="SmallDateTime")]
public System.Nullable<System.DateTime> DueDate
{
    get
    {
        if(this._DueDate == null)
        {
            return DateTime.Today.AddYears(10);
        }
        return this._DueDate;
    }

Так что, если вы когда-либо запросите DueDate для объекта, а DueDate имеет значение null, вы по крайней мере получите дату в далеком будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...