繁体   English   中英

C#:如何从LINQ结果获取匿名类型

[英]C# : How to get anonymous type from LINQ result

我需要获取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();

问题出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 }

假设您有一个定义nn关系的导航属性,我将这样写:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM