Есть ли эквивалент LINQ строки. Соединение (строка, строка []) [дубликат]

В Laravel 5.7 вы можете создать наблюдателя модели из командной строки следующим образом:

php artisan make:observer ClientObserver --model=Client

Затем в вашем app \ AppServiceProvider сообщите загрузочному методу модель для наблюдения и имя класса наблюдателя. .

use App\Client;
use App\Observers\ClientObserver;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
   {
        Client::observe(ClientObserver::class);
   }
   ...
}

Затем в вашем приложении \ Observers \ вы должны найти наблюдателя, которого вы создали выше, в данном случае ClientObserver, уже заполненного созданными / обновленными / удаленными обработчиками событий, чтобы вы могли заполнить их логикой. Мой ClientObserver:

namespace App\Observers;

use App\Client;

class ClientObserver
{

    public function created(Client $client)
    {
        // do your after-model-creation logic here
    }
    ...
}

Мне действительно нравится простота этого способа сделать это. Ссылка https://laravel.com/docs/5.7/eloquent#events

15
задан Matthew Dresser 1 June 2009 в 12:34
поделиться

4 ответа

Почему бы вам не использовать строку . Присоединиться к самому ?

string.Join("<br/>", collection.Select(e => e.TextProp).ToArray());
24
ответ дан 1 December 2019 в 00:24
поделиться

Вы можете использовать метод агрегирования ...

var myResults = (from myString in MyStrings
                 select myString)
                .Aggregate(string.Empty, (results, nextString) 
                   => string.Format("{0}<br />{1}", results, nextString));

или

var myResults = MyStrings.Aggregate(string.Empty, (results, nextString) 
                   => string.Format("{0}<br />{1}", results, nextString));
14
ответ дан 1 December 2019 в 00:24
поделиться

Обычным способом было бы использовать один из операторов агрегирования ( Агрегат , Сумма , Среднее значение и т. Д.), Но это полностью зависит от типа и того, что вы хотите сделать. Какой тип вас интересует?

РЕДАКТИРОВАТЬ: Итак, вы хотите объединить строки ... Я не думаю , что есть что-нибудь, что сделает это в самом LINQ to SQL. Параметры:

  • Записать сохраненную процедуру или TVF, чтобы сделать это в SQL
  • Извлечь отдельные строки в LINQ to SQL и объединить обратно на стороне клиента
7
ответ дан 1 December 2019 в 00:24
поделиться

Большинство решений здесь довольно неэффективны, если у вас есть большое количество значений, которые вы хотите объединить. Кроме того, они не так удобочитаемы. Если вы собираетесь делать подобные вещи часто, то для этого стоит создать свой собственный метод расширения. Реализация ниже позволяет вам сделать эквивалент string.Join (",", arrayOfStrings) , где arrayOfStrings может быть IEnumerable , а разделителем может быть любой объект в все. Это позволяет вам делать что-то вроде этого:

var names = new [] { "Fred", "Barney", "Wilma", "Betty" };
var list = names
    .Where(n => n.Contains("e"))
    .Join(", ");

Мне нравятся две вещи:

  1. Это очень удобно для чтения в контексте LINQ.
  2. Это довольно эффективно, поскольку использует StringBuilder и позволяет избежать двойной оценки перечисления, что важно в сценарии с базой данных (L2S, L2E или L2Nh).
public static string Join<TItem,TSep>( 
    this IEnumerable<TItem> enuml, 
    TSep                    separator) 
{ 
    if (null == enuml) return string.Empty; 

    var sb = new StringBuilder(); 

    using (var enumr = enuml.GetEnumerator()) 
    { 
        if (null != enumr && enumr.MoveNext()) 
        { 
            sb.Append(enumr.Current); 
            while (enumr.MoveNext()) 
            { 
                sb.Append(separator).Append(enumr.Current); 
            } 
        } 
    } 

    return sb.ToString(); 
}
4
ответ дан 1 December 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: