Я пытаюсь построить нечто вроде условных запросов, чтобы получить только необходимые данные из базовой базы данных.
В настоящее время у меня есть следующий запрос (который отлично работает)
var eventData = dbContext.Event.Select(t => new
{
Address = true ? new AnonymousEventGetAddress
{
AddressLine1 = t.Address.AddressLine1,
CityName = t.Address.AddressCityName
} : new AnonymousEventGetAddress(),
});
Если я изменю его на
var includeAddress = true; // this will normally be passed as param
var eventData = dbContext.Event.Select(t => new
{
Address = includeAddress ? new AnonymousEventGetAddress
{
AddressLine1 = t.Address.AddressLine1,
CityName = t.Address.AddressCityName
} : new AnonymousEventGetAddress(),
});
Я получаю следующую ошибку:
Тип 'AnonymousEventGetAddress' появляется в двух структурно несовместимых инициализациях в одном запросе LINQ to Entities. Тип может быть инициализирован в двух местах в одном запросе, но только если в обоих местах установлены одни и те же свойства, и эти свойства заданы в одном порядке.
Что я делаю неправильно здесь (как с true
он работает) и как это можно исправить?
Я знаю, что изменение else
-part на
new AnonymousEventGetAddress
{
AddressLine1 = null,
CityName = null
}
будет работать. Но если я изменю порядок свойств, это также не сработает.
Используемый класс определяется следующим образом:
public class AnonymousEventGetAddress : BaseAnonymousObject<AnonymousEventGetAddress>
{
public string AddressLine1 { get; set; }
public string CityName { get; set; }
}
тогда как BaseAnonymousObject<AnonymousEventGetAddress>
определяется:
public abstract class BaseAnonymousObject<TAnonymous>
where TAnonymous : BaseAnonymousObject<TAnonymous>
{
// this is used in case I have to return a list instead of a single anonymous object
public static Expression<Func<IEnumerable<TAnonymous>>> Empty => () => new TAnonymous[]{}.AsEnumerable();
}