0

我有两个对象序列;即Messages对象MessageNewsflashes对象Newsflash

两者都是通过实体框架 ADO.NET 实体模型派生的。模型示意图如下: 在此处输入图像描述

如您所见,Newsflash继承自Message. 但是,控制器中生成的索引以某种方式出错,我需要进行手动查询以将正确的序列传递给视图。

Newsflash表只有一列,即 Id,同时是 Id 的外键Message。我想在 LINQ 中这样查询SELECT * FROM MESSAGE WHERE ID IN (SELECT ID FROM NEWSFLASH)

到目前为止,我已经尝试过这样的事情: var message = Messages.Where(x => x.Id == Newsflash.Any(y=>y.Id))

但我收到无法将 int 转换为 bool 的错误。我做错了什么?如何在 LINQ 中处理嵌套选择,尤其是来自列表的选择?如何访问序列中的元素;在这种情况下Newsflash,以便我可以单独获取 ID?

4

2 回答 2

2

如果newsflash 只是一个ID 列表试试这个。

var message = Messages.Where(x => Newsflash.Contains(x.Id));

或者

var message = Messages.Where(x => Newsflash.Select(y => y).Contains(x.Id));

简单的例子。

var listOfInts = new List<int>{1,2,3,4,5,6,7,8,9,10};
var listOfInts2 = new List<int>{1,2,3,4,5};

listOfInts.Where(x => listOfInts2.Contains(x));
于 2013-06-11T01:49:20.353 回答
2

Any 返回一个布尔值,而不是值列表。如果你想要一个 Newsflash ID 的列表,你可以使用Newsflash.Select(x => x.Id)

要获取包含新闻快讯的消息列表,您应该使用:

var messages = (from m in Messages
                join n in Newsflash on m.Id equals n.Id
                select m).ToList();

这将根据每个消息的 Id 将消息加入到您的新闻快讯中,然后选择匹配的消息对象。

替代兰巴语法:

var messages = Messages.Join(Newsflash, x => x.Id, y => y.Id, (x, y) => new { Message = x }).ToList();
于 2013-06-11T01:35:35.403 回答