LINQ: Выберите объект и измените некоторые свойства, не создавая новый объект

Дело не в том, что ваш вопрос не является хорошим или рациональным, просто он не очень подходит для стекового потока. Stackoverflow больше подходит для вопросов конкретного типа программирования. Подробнее об этом вы можете прочитать в разделе сайта «Как задавать вопросы». Считай, что тебе повезло, что ты получил только один голос. Я ожидал бы, что это будет быстро закрыто.

Сказав это, я собираюсь соединить вас с одним из моих собственных грехов и использовать ответ не для того, чтобы ответить на вопрос, а для того, чтобы получить немного больше информации. Я предполагаю, что ваша путаница в основном терминологическая. Твои слова говорят об одном, но я подозреваю, что ты просишь о другом. Это одна из причин, почему stackoverflow любит иметь немного кода в своих вопросах.

В частности:

Операторы php require и include не очень помогают в этом, потому что вы не можете просто поместить несколько блоков функций / кода в файл include / require, по крайней мере, из моего опыта, без создания вспомогательного класса-оболочки.

Честно говоря, я не знаю, что вы подразумеваете под "функциями / кодовыми блоками". Очевидно, что это работает:

# functions.php
function func1() { echo "func1\n"; }
function func2() { echo "func2\n"; }
function func3() { echo "func3\n"; }

# main.php
require_once 'functions.php';

func1();
func2();
func3();

Не требуется «служебный класс-обертка». Но опять же, я уверен, что вы это знаете.

Подумайте над тем, чтобы обновить свой вопрос конкретным примером того, что вы пытались сделать. Даже ваше вступительное заявление об использовании вашего «файла проекта Symfony» очень неясно. У Symfony есть куча файлов, но я не знаю ни одного из них, которые обычно называют файлом проекта.

204
задан plr108 19 November 2019 в 10:56
поделиться

5 ответов

I ' м не уверен, каков синтаксис запроса. Но вот пример расширенного выражения LINQ.

var query = someList.Select(x => { x.SomeProp = "foo"; return x; })

Он использует анонимный метод vs и выражение. Это позволяет использовать несколько операторов в одной лямбде. Таким образом, вы можете объединить две операции установки свойства и возврата объекта в этот несколько сжатый метод.

360
ответ дан 23 November 2019 в 04:54
поделиться

Не должно быть никакого магического хранения LINQ вы от этого. Не используйте проекцию, но она вернет анонимный тип.

User u = UserCollection.FirstOrDefault(u => u.Id == 1);
u.FirstName = "Bob"

Это изменит реальный объект, а также:

foreach (User u in UserCollection.Where(u => u.Id > 10)
{
    u.Property = SomeValue;
}
20
ответ дан 23 November 2019 в 04:54
поделиться

Это невозможно со стандартными операторами запросов - это интегрированный языковой запрос, а не интегрированное обновление языка. Но вы можете скрыть свое обновление в методах расширения.

public static class UpdateExtension
{
    public static IEnumerable<Car> ChangeColorTo(
       this IEnumerable<Car> cars, Color color)
    {
       foreach (Car car in cars)
       {
          car.Color = color;
          yield return car;
       }
    }
}

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

cars.Where(car => car.Color == Color.Blue).ChangeColorTo(Color.Red);
10
ответ дан 23 November 2019 в 04:54
поделиться
var item = (from something in someList
       select x).firstordefault();

Получит элемент ], а затем вы можете выполнить item.prop1 = 5; , чтобы изменить конкретное свойство.

Или вы хотите получить список элементов из базы данных и изменить свойство prop1 для каждого элемента в этом возвращенном списке на указанное значение? Если это так, вы можете сделать это (я делаю это в VB, потому что знаю это лучше):

dim list = from something in someList select x
for each item in list
    item.prop1=5
next

( список будет содержать все элементы, возвращенные с вашими изменениями)

0
ответ дан 23 November 2019 в 04:54
поделиться

Если вы просто хотите обновить свойство для всех элементов, тогда

someList.All(x => { x.SomeProp = "foo"; return true; })
57
ответ дан 23 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

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