我需要获取NewsImage字段和与多对多关系中的新闻相关联的类别ID列表...但它给了我错误:
join子句中某个表达式的类型不正确。在“Join”调用中,类型推断失败。
我的代码看起来像这样
var Result1 = (from c in db.News
join d in db.Categories
on c.NewsId equals d.News.Select(l => l.NewsId)
where c.NewsId == 1
select new { c.NewsImagePath, d.CategoryId }).ToList();
答案 0 :(得分:1)
问题出在on
声明中。
on c.NewsId equals d.News.Select( l => l.NewsId )
右侧的选择将返回IEnumerable
个新闻,这不是您想要的。
这样的东西在技术上会起作用:
on c.NewsId equals d.News.Select( l => l.NewsId ).FirstOrDefault()
但这在逻辑上没有意义。
我怀疑整个查询应该以不同的方式构建。我想你想在新闻的类别列表包含新闻项目时加入。在这种情况下,您无法使用join
语句,它看起来有点像这样:
from n in db.News
from c in db.Categories
where c.News.Select( ne => ne.NewsId ).Contains( n.NewsId )
select new { n.NewsImagePath, c.CategoryId }
答案 1 :(得分:1)
假设你有一个定义n-n关系的导航属性我会写:
var result = db.News
.Where(x => x.NewsId == 1)
.SelectMany(x => x.Categories,
(news, category) => new { news.NewsImagePath, category.CategoryId })
.ToList();