Поскольку LINQ отложила выполнение можно определить запрос в родительской области и запустить его в сточный блоке Ьгу так:
var productsDB = new List<Func<string>>() {() => "Apples",() => "Pears",() => "Bannanas" };//,() => { throw new NotImplementedException(); } }; // sorry, couldn't think of a better way to make this fail in 2 mins..
var products = (
from p in productsDB
select new
{
Name = p()
});
try
{
products.ToList(); // runs the LINQ query
products.Dump(); // prints the results (LINQPad)
}
catch { "there was an error".Dump(); }
Или другой вариант является класс Кортеж, который отлично подходит для такого рода вещи:
var productsDB = new[] { "Apples", "Pears", "Bannanas" };
List<Tuple<string>> products;
try
{
products = (
from p in productsDB
select Tuple.Create(p)).ToList();
products.Dump();
}
catch { "there was an error".Dump(); }
// Build anonymous type from (read-only) Tuple here if necessary...
EDIT: Просто понял, что я неправильно прочитал пост: р - мой первоначальный Херес пост:
Я думаю, что это просто типа проверки жалуюсь, попробовать что-то вроде этого ..
var employees = (
from person in db.denormalisedPeople
where person.Type == "employee"
select new
{
name = employee.FullName,
areaID = new Nullable<int>(), // placeholder.. set in a future query
}).ToList();
(непроверенный код, но техника отлично работает для меня)
Но он учитывает внутренние знания компилятора, что может быть неверным для других компиляторов или для будущих версий компилятора. (Конечно, _you_ может сделать это верным для компилятора Microsoft C# ...) Или ... это где-то в спецификации? Будет ли это работать через собрания? –
@ Jordão: Я не буду следовать за тобой. Как следует учитывать внутренние знания компилятора? Это законный C#, и любая соответствующая реализация должна иметь такое поведение. Почему вы считаете, что это поведение, определяемое реализацией? Что «будет ли это работать через собрания?» имею в виду? Я не понимаю, что значит «работать» в вашем вопросе. –
@ Jordão: Если вы «работаете через сборки», вы имеете в виду, что у вас есть два метода в двух сборках, которые возвращают «идентичные» объекты анонимного типа, не могли бы вы рассматривать их как один и тот же тип, а затем нет. Спецификация C# заявляет, что анонимные типы гарантируются только в рамках единой компиляции. –