Linq, как удалить элементы в середине запроса возврата? - PullRequest
0 голосов
/ 12 мая 2010

Я получил список объектов в следующем запросе. Как удалить элементы посередине, говоря, что я хочу удалить элементы в 2, 5 и 7 позиции? спасибо

            var archivedPwds = from archivedPwd in db.PasswordArchive
                               where archivedPwd.UserId == userId
                               orderby archivedPwd.DateChanged
                               select archivedPwd;

EDIT:

Я использую L2E и хочу удалить эти элементы из базы данных.

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Вы не можете "удалить" элементы из IEnumerable или IQueryable. Что вы можете сделать, это отфильтровать их или создать другую коллекцию из результатов фильтрации.

Фильтрация по индексу по-прежнему выполняется с помощью Where:

var indexesToFilterOut = new[] { 2, 5, 7 };
var filtered = archivedPwds.Where((pwd, i) => !indexesToFilterOut.Contains(i));
1 голос
/ 12 мая 2010

Вы можете использовать метод Джона для фильтрации только сущностей для удаления:

var pwdsToDelete = archivedPwds.Where((_, i) => (i == 3 || i == 5 || i == 7));

А затем удалите их все из набора сущностей:

foreach (var pwd in pwdsToDelete)
{
    db.PasswordArchive.DeleteObject(pwd);
}

Не забудьте также сохранить изменения:

db.SaveChanges();
0 голосов
/ 12 мая 2010

К сожалению, в этом случае единственным вариантом является перебирать цикл archivedPwds и удалять их «вручную» (т.е. вызывая db.PasswordArchive.DeleteOnSubmit).

Вы можете попробовать использовать перегрузку метода Select для получения индексов элементов, я. е. переписав его в

var archivedPwds = db.PasswordArchive
                     .Where(x => x.UserId == userId)
                     .OrderBy(x => x.DateChanged)
                     .Select((idx, item) => new { Index = idx, Item = itm })

, а затем используйте поле Index для фильтрации элементов, которые вы хотите удалить. Хотя я не пробовал это в реальном мире, и я не совсем уверен, сможет ли linq2sql обработать его.

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