Это моя база данных ПОКО:Строительство SqlExpression бросает InvalidOperationException, когда не используется анонимный типа в Select() пункт
public class MyPoco1
{
public int Id { get; set; }
public string Name { get; set; }
}
Я хочу, чтобы выбрать и результаты карты в пользовательские POCO с другим именем свойства:
public class MyPocoAlias1
{
public string OtherName { get; set; }
}
public class MyService : ServiceStack.Service
{
public List<MyPocoAlias1> Any(MyRequest request)
{
// throws InvalidOperationException
var q1 = Db.From<MyPoco1>().Select(c => new MyPocoAlias1 { OtherName = c.Name });
// this works
var q2 = Db.From<MyPoco1>().Select(c => new { OtherName = c.Name });
var items = Db.Select<MyPocoAlias1>(q2);
return items;
}
}
q1 терпит неудачу с System.InvalidOperationException:
«переменная 'с' типа эталонным 'MyPoco1' d из области действия '', но это не определено ".
q2 работает, но есть ли способ сделать это с помощью сильного типа (который проверяет правильные имена/типы свойств) или это обязательно для использования анонимного типа в предложении .Select()?
Как q2 в моем примере? Значит, нельзя использовать класс в Select()? –
вы можете использовать анонимный класс, который выполняет эту работу, намного проще. и позволяет вам называть его, что вы хотите. но можно использовать класс. вы должны использовать lambda expresion. вы знаете о них? – Media
Я не могу назвать его, что хочу, потому что я должен отобразить результат в «MyPocoAlias1». Я немного разбираюсь в лямбда-выражениях, но не могу понять, что не так в моем коде (и я не понимаю детали исключения), не то, что 'c => new MyPocoAlias1 {OtherName = c.Name}' a действительная лямбда? –