c# - first - relacion muchos a muchos entity framework
Consulte una relaciĆ³n de muchos a muchos con linq/Entity Framework. CodeFirst (5)
¿Cómo puedo consultar una relación de muchos a muchos utilizando primero el código de Entity Framework y linq? El problema es que EF crea automáticamente la tabla de relaciones. Por lo tanto, no lo tengo en mi contexto.
Este es el modelo relacional:
Necesito una lista de artículos para un ID de categoría específico, básicamente replicar algo así:
select a.Id, a.Title,a.ShortDescription
from Articles a
join CategoryArticles ca on ca.Article_Id=a.Id
where ca.Category_Id = @parameter
Sin embargo mi dbcontext solo tiene:
public DbSet<Article> Articles { get; set; }
public DbSet<Category> Categories { get; set; }.
Gracias por cualquier ayuda.
Ejemplo de sintaxis del método linq
int category_ID = 1;
var query = db.Articles
.Where(a => a.Categories
.Any(c => c.Category_ID == category_ID))
.ToList();
Puedes hacerlo:
var cat_id=1; // Change this variable for your real cat_id
var query= from article in db.Articles
where article.Categories.Any(c=>c.Category_ID==cat_id)
select article;
De esta manera obtendrá los artículos que satisfagan las condiciones que desea. Este es el código sql generado por esa consulta:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title]
FROM [dbo].[Articles] AS [Extent1]
WHERE EXISTS (SELECT
1 AS [C1]
FROM [dbo].[ArticleCategories] AS [Extent2]
WHERE ([Extent1].[Id] = [Extent2].[Article_Id]) AND ([Extent2].[Category_Id] = @p__linq__0))
Qué tal si
db.Categories.Where(c => c.Id == categoryId).SelectMany(c => c.Articles)?
Esto debería funcionar bien (produzca la declaración SQL unida a la derecha).
Si solo desea que la tabla completa incluya todas las relaciones, tal vez intente algo como esto:
List<CategoryArticle> rec = context.Category.SelectMany(a => a.Articles.Select(c => new CategoryArticle { Category_Id = c.Id, Article_Id = a.Id })).ToList();
Simplemente me encontré con esto y pensé que publicaría la solución que encontré para cualquiera que se encontrara con esta página. Esto produce una INNER JOIN
.
var category_id = 24;
var query = (from article in Articles
from category in article.Categories.Where(x => x.Category_ID == category_id)
select article);