Если комната не может удалить символьную ссылку, возможно, необходимо посмотреть на полномочия на каталоге, который содержит символьную ссылку. Для удаления записей каталога Вы должны записать разрешение на содержании каталога.
Чтобы соединить элементы в двух списках, вы можете использовать соединение LINQ:
var pairs = from d in someData
join b in baseList.AsEnumerable()
on d.someCode equals b.myCode
select new { b, d };
Это даст вам перечисление каждого элемента в someData
в паре с его аналогом в baseList
. Оттуда вы можете объединить в цикл:
foreach(var pair in pairs)
pair.b.SomeData += pair.d.DataIWantToConcantenate;
Если вы действительно имели в виду объединение наборов, а не + =
, взгляните на методы LINQ Union, Intersect или Except.
LINQ предназначен для запросов , а не для обновления. Это означает, что для поиска соответствующего элемента можно использовать LINQ, но для модификации вы должны использовать итерацию.
По общему признанию, вам может потребоваться выполнить соответствующий запрос, чтобы получить baseList Сначала
в эффективную форму - например, Dictionary
на основе свойства, которое вы будете использовать для поиска соответствующего элемента.
Вы можете преобразовать IQueryable
в List
, используйте метод ForEach
для циклического перебора он и обновляет элементы, а затем конвертирует обратно в IQueryable
:
List<SomeClass> convertedList = baseList.ToList();
convertedList.ForEach(sc =>
{
SomeOtherClass oc = someData.First(obj => obj.SomeCode == sc.MyCode);
if (oc != null)
{
sc.SomeData += oc.DataIWantToConcatenate;
}
});
baseList = convertedList.AsQueryable(); // back to IQueryable
Но при этом может быть более эффективным использование конструкций, отличных от LINQ.
Вы не можете просто найти объекты, которые есть в одном списке, но не в другом, потому что это два разных типа. Я предполагаю, что вы сравниваете свойство с именем OtherProperty, которое является общим для двух разных классов и имеет один и тот же тип. В этом случае, используя только запросы Linq:
// update those items that match by creating a new item with an
// updated property
var updated =
from d in data
join b in baseList on d.OtherProperty equals b.OtherProperty
select new MyType()
{
PropertyToUpdate = d.PropertyToUpdate,
OtherProperty = d.OtherProperty
};
// and now add to that all the items in baseList that weren't found in data
var result =
(from b in baseList
where !updated.Select(x => x.OtherProperty).Contains(b.OtherProperty)
select b).Concat(updated);