我尝试将此查询与linq:
一起使用myQuery= myQuery.Where(c => c.RelatedEntity
.FirstOrDefault()
.MyStringProperty
.Contains(myString));
但它说不可能使用First()
,我必须考虑使用FirstOrDefault()
。但如果我使用第一个或默认值,我会收到其他错误System.Data.EntityCommandCompilationException
。
我想要的是找到其他MainEntities,其中string属性中的相关实体包含用户给出的参数的字符串。
感谢。
编辑:我添加了更多信息。
我的存储库的代码是:
using(catalogoEntitiesSQLiteEF5 miDBContext = new catalogoEntitiesSQLiteEF5())
{
IQueryable<Contenidos> miConsulta = miDBContext.Contenidos.Include(c=>c.Videos.Select(v=>v.GenerosVideos));
if (paramVideos.Titulo != null)
{
miConsulta = miConsulta.Where(c => c.Videos.First().Titulo.Contains(paramVideos.Titulo));
}
return miConsulta.ToList<Contenidos>();
}
POCO实体:
public partial class Contenidos
{
public Contenidos()
{
this.Ficheros = new HashSet<Ficheros>();
this.Videos = new HashSet<Videos>();
}
public long IDContenido { get; set; }
public long IDTipoContenido { get; set; }
public string Observaciones { get; set; }
public virtual TiposContenidos TiposContenidos { get; set; }
public virtual ICollection<Ficheros> Ficheros { get; set; }
public virtual ICollection<Videos> Videos { get; set; }
}
public partial class GenerosVideos
{
public GenerosVideos()
{
this.Videos = new HashSet<Videos>();
}
public long IDGenero { get; set; }
public string GeneroVideo { get; set; }
public virtual ICollection<Videos> Videos { get; set; }
}
public partial class Videos
{
public Videos()
{
this.Series = new HashSet<Series>();
this.GenerosVideos = new HashSet<GenerosVideos>();
}
public long IDVideo { get; set; }
public long IDContenido { get; set; }
public long IDTipoVideo { get; set; }
public string Titulo { get; set; }
public string TituloOriginal { get; set; }
public Nullable<long> Duracion { get; set; }
public Nullable<long> Año { get; set; }
public bool Favorito { get; set; }
public bool Pendiente { get; set; }
public virtual Contenidos Contenidos { get; set; }
public virtual ICollection<Series> Series { get; set; }
public virtual TiposVideos TiposVideos { get; set; }
public virtual ICollection<GenerosVideos> GenerosVideos { get; set; }
}
答案 0 :(得分:1)
Any()
应该有效:
myQuery = myQyuery.Where(c => c.RelatedEntity
.Any(x => x.MyStringProperty.Contains(myString)));
答案 1 :(得分:1)
这个怎么样:
myQuery= myQuery.Where(c => c.RelatedEntity.FirstOrDefault(x => x.MyStringProperty.Contains(myString));
答案 2 :(得分:1)
如果您的列表中不包含任何元素,FirstOrDefault()
将返回null,这将导致NullReferenceException
。
为避免使用:
myQuery= myQuery.Where(c => c.RelatedEntity
.FirstOrDefault(x => x.MyStringProperty
.Contains(myString)) != null);
另一个问题是您对Include()
的使用。正如James所指出的,它不支持子查询。尝试改变你的:
IQueryable<Contenidos> miConsulta =
miDBContext.Contenidos.Include(c=>c.Videos.Select(v=>v.GenerosVideos));
类似于:
IQueryable<Contenidos> miConsulta =
miDBContext.Contenidos.Include(x => x.Videos)
.Select(x => new {
GenerosVideos = x.Videos.Select(v=>v.GenerosVideos).ToList()
});