Как объединить строки в LINQ, правильно обрабатывая значения NULL - PullRequest
4 голосов
/ 07 апреля 2011

Я бы хотел элегантный способ объединить несколько столбцов вместе, используя LINQ, но использование оператора + или concat (), когда любой из столбцов равен NULL, приводит к NULL для значения после объединения.

Есть ли что-то похожее на concat (), которое обрабатывает NULL по-другому, или я думаю об этом неправильно?

Любая помощь приветствуется!

Воткод, который я использую:

List<CustomObject> objects = (
    from obj in ObjectTable
    where obj.Id == Id
    select new CustomObject()
    {
        EnteredBy = obj.EnteredBy, 
        EntryDate = obj.EntryDate, 
        WorknoteText = 
            obj.VchWorkNote1 +
            obj.VchWorkNote2 + 
            obj.VchWorkNote3 +
            obj.VchWorkNote4 +
            obj.VchWorkNote5 +
            obj.VchWorkNote6 +
            obj.VchWorkNote7 +
            obj.VchWorkNote8 +
            obj.VchWorkNote9 +
            obj.VchWorkNote10 +
            obj.VchWorkNote11 +
            obj.VchWorkNote12 +
            obj.VchWorkNote13 +
            obj.VchWorkNote14 +
            obj.VchWorkNote15 +
            obj.VchWorkNote16 +
            obj.VchWorkNote17 +
            obj.VchWorkNote18 +
            obj.VchWorkNote19 +
            obj.VchWorkNote20
    }).ToList();

Ответы [ 5 ]

13 голосов
/ 07 апреля 2011

Один из вариантов - использовать оператор объединения нулей:

List<CustomObject> objects = (from o in ObjectTable
                              where o.Id == Id
                              select new CustomObject(){
                              EnteredBy = o.EnteredBy, 
                              EntryDate = o.EntryDate, 
                              WorknoteText = 
                              (o.VchWorkNote1 ?? "") +
                              (o.VchWorkNote2 ?? "") + 
                              (o.VchWorkNote3 ?? "") +
                              (o.VchWorkNote4 ?? "") +
                              ...
                              (o.VchWorkNote20 ?? "")
                              }).ToList();

Надеемся, что сгенерированный SQL будет использовать соответствующий перевод.

3 голосов
/ 07 апреля 2011

Вы можете использовать ??оператор таким образом:

...
(object.VchWorkNote5 ?? "") +
(object.VchWorkNote6 ?? "") +
(object.VchWorkNote7 ?? "") +
...
2 голосов
/ 07 апреля 2011

Как насчет (object.VchWorkNote1 ?? "") + .....

2 голосов
/ 07 апреля 2011

Можете ли вы добавить новый столбец в вашу базу данных?Что-то вроде «Ключевые слова» или «Полный текст»

Определите это, чтобы иметь вычисление, это вычисление в основном "ISNULL(<Field1>, '') + ISNULL(<Field2>, '')" и т. Д.

Убедитесь, что отметили это как сохраненное, чтобыприходится каждый раз вычислять.

Тогда вам просто нужно вытащить это одно поле из таблицы.

0 голосов
/ 07 апреля 2011

возможно, есть более чистый путь, но первое, что приходит на ум, - это быстрое преобразование строки с нулевой длины на нулевую:

List<CustomObject> objects = (from object in ObjectTable
                         where object.Id == Id
                     select new CustomObject(){
                         EnteredBy = object.EnteredBy, 
                         EntryDate = object.EntryDate, 
                         WorknoteText = 
                         object.VchWorkNote1 ?? "" +
                         object.VchWorkNote2 ?? "" + 
                         object.VchWorkNote3 ?? "" +
                         object.VchWorkNote4 ?? "" +
                         object.VchWorkNote5 ?? "" +
                         object.VchWorkNote6 ?? "" +
                         object.VchWorkNote7 ?? "" +
                         object.VchWorkNote8 ?? "" +
                         object.VchWorkNote9 ?? "" +
                         object.VchWorkNote10 ?? "" +
                         object.VchWorkNote11 ?? "" +
                         object.VchWorkNote12 ?? "" +
                         object.VchWorkNote13 ?? "" +
                         object.VchWorkNote14 ?? "" +
                         object.VchWorkNote15 ?? "" +
                         object.VchWorkNote16 ?? "" +
                         object.VchWorkNote17 ?? "" +
                         object.VchWorkNote18 ?? "" +
                         object.VchWorkNote19 ?? "" +
                         object.VchWorkNote20 ?? ""
                     }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...