如何从LINQ结果中获取匿名类型

本文关键字:获取 类型 结果 LINQ | 更新日期: 2023-09-27 18:05:36

我需要获得NewsImage字段和与多对多关系中的新闻相关联的类别id列表…但是它给了我错误:

连接子句中一个表达式的类型不正确。调用"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();

如何从LINQ结果中获取匿名类型

假设你有一个定义n-n关系的导航属性,我将写:

var result = db.News
  .Where(x => x.NewsId == 1)
  .SelectMany(x => x.Categories, 
              (news, category) => new { news.NewsImagePath, category.CategoryId })
  .ToList();

问题在on语句中。

on c.NewsId equals d.News.Select( l => l.NewsId )

右侧的Select将返回新闻的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 }