Я объединяю 2 в коллекции памяти
var items =
from el in elements
join def in Cached.Elements()
on el.Value equals def.Name into temp1
from res in temp1.DefaultIfEmpty()
select new
{
el.NodeType,
res.DefKey,
res.DefType,
res.BaseKey,
el.Value
};
Однако, в идеале, если один из элементов не может быть найден, я хотел бы вызвать исключение, что-то вроде
throw new System.Exception(el.Value + " cannot be found in cache!");
Я смотрел на System.Interactive, который предлагает метод расширения Catch, но я не уверен, как ссылаться на текущий 'el' в этом контексте.Так, например, мне было интересно что-то вроде
var items = (
from el in elements
join def in Cached.Elements()
on el.Value equals def.Name into temp1
from res in temp1.DefaultIfEmpty()
select new
{
el.NodeType,
res.DefKey,
res.DefType,
res.BaseKey,
el.Value
})
.ThrowIfEmpty();
, но, istm, это повлечет за собой передачу всего набора в метод расширения, а не вызовет исключение при обнаружении пропущенного значения.1011 * В качестве альтернативы, я мог бы заменить DefaultIfEmpty на ThrowIfEmpty
var items = (
from el in elements
join def in Cached.Elements()
on el.Value equals def.Name into temp1
from res in temp1.ThrowIfEmpty()
select new
{
el.NodeType,
res.DefKey,
res.DefType,
res.BaseKey,
el.Value
});
Есть ли «правильный» / лучший способ сделать это?