Это несколько запутанно, но вы можете сделать это, обернув свою функцию отображения в потоке и используя flatMapConcat
примерно так:
Source(List(item1, item2, item3)).flatMapConcat { item =>
Source(List(item))
.map(mapF)
.withAttributes(ActorAttributes.supervisionStrategy { e: Throwable =>
logger.error("Exception in stream with itemId:" + item.id, e)
Supervision.Resume
})
}
def mapF(item: Item) =
if (item.property < 0) {
throw new RuntimeException("Error")
} else {
i
}
Это возможно, потому что у каждой стадии потока может быть своя собственная стратегия наблюдения .
Необходимо или использовать этого:
.Where(string.Format("it.ID in {0}", string.Join(",", valueIds.ToArray())));
или создайте ГДЕ часть динамично, как в этом сообщении.
Ссылка, на которую ссылаются, содержит следующее обновление:
... в EF4 мы добавили, что поддержка Содержит метод и по крайней мере в этом конкретном случае для параметров со знаком набора. Поэтому этот вид кода теперь работает правильно из поля , и не необходимо использовать любую additinal технологию строительства выражения:
var statusesToFind = new List<int> {1, 2, 3, 4};
var foos = from foo in myEntities.Foos
where statusesToFind.Contains(foo.Status)
select foo;
Мой обходной путь заключается в преобразовании результата сущностей в Список и после , которые применяют функцию Contains().
Пример:
var items = db.InventoryItem
.Include("Kind")
.Include("PropertyValues")
.Include("PropertyValues.KindProperty")
.ToList()
.Where(itm => valueIds.Contains(itm.ID));