Возможно ли реализовать условие условного соединения в Entity Framework 6? В частности, INNER JOIN ON (логическое условие 1) ИЛИ (логическое условие2).Возможно реализовать условие условного соединения - JOIN ON condition1 ИЛИ condition2?
Код ниже работает, но дважды вызывает базу данных. Можно ли объединить его в один звонок?
Существует внешний ключ отношения, которые связывает FirmFeatures.FeatureId с Nullable FirmParameters.FeatureId
var dbContext = new MyEntities();
var feature = dbContext.FirmFeatures
.Where(f => f.FeatureId == featureId)
.First();
var parameters = dbContext.FirmParameters.AsQueryable();
parameters = feature.IsDbTable
? parameters.Where(p => p.FeatureId == null)
: parameters.Where(p => p.FeatureId == featureId);
var list = parameters.ToList()
SQL, вызов будет выглядеть примерно так:
SELECT feature.*, parameter.*
FROM [FirmFeature] AS feature
INNER JOIN [FirmParameter] AS parameter
ON (feature.IsDbTable = 0 AND feature.FeatureId = parameter.FeatureId) OR (feature.IsDbTable = 1 AND parameter.FeatureId IS NULL)
WHERE feature.[FeatureId] = 3
Эта модель базы данных заемных средств в первую очередь.
Я новичок в платформе Entity Framework.
Редактировать 2: Я надеюсь, что в результате этого будет создан объект объектов и объект параметров, загруженный из базы данных.
EDIT: В соответствии с просьбой, вот модели:
{
public FirmFeature()
{ this.FirmParameters = new HashSet<FirmParameter>(); }
public byte FeatureId { get; set; }
public bool IsDbTable { get; set; }
...
public virtual ICollection<FirmParameter> FirmParameters { get; set; }
}
public partial class FirmParameter
{
public byte ParameterId { get; set; }
public Nullable<byte> FeatureId { get; set; }
...
public virtual FirmFeature FirmFeature { get; set; }
public virtual FirmParameter FirmParameter1 { get; set; }
public virtual FirmParameter FirmParameter2 { get; set; }
}
могли бы вы поделиться C# дб схемы? – czifro
Вам нужно показать свои сущности. Кроме того, нет причин добавлять 'AsQueryable()' после 'dbContext.FirmParameters', который уже является' IQueryable'. – haim770
Без этого компиляция не удалась. Невозможно неявно преобразовать тип «System.Linq.IQueryable» в «System.Data.Entity.DbSet ». Явное преобразование существует (вы пропускаете листинг?) @ Haim770 –
Hoppe