我有一个 LINQ 查询:
var result = from mt in MessageTypes
join mtfmt in MessageTypeField_MessageTypes
on new { MessageTypeID = mt.ID, MessageTypeFieldID = messageTypeFieldId } equals new { MessageTypeID = mtfmt.MessageTypeID, MessageTypeFieldID = mtfmt.MessageTypeFieldID }
where (mt.StatusID == (int)status)
select mt;
或 Lambda 语法,如果您愿意(我正在使用的那个)(messageTypeFieldID
设置在来自参数的 var 调用之上。):
var messageTypes = context.MessageTypes
.Join(
context.MessageTypeField_MessageTypes,
mt =>
new
{
MessageTypeID = mt.ID,
MessageTypeFieldID = messageTypeFieldID
},
mtfmt =>
new
{
MessageTypeID = mtfmt.MessageTypeID,
MessageTypeFieldID = mtfmt.MessageTypeFieldID
},
(mt, mtfmt) =>
new
{
mt = mt,
mtfmt = mtfmt
}
)
.Where(x => (x.mt.StatusID == (int)status))
.Select(x => x.mt);
我刚刚开始学习 LINQ 连接,并遇到了一种情况,即在我正在设置的新规范化(多对多)表中需要它,并且我希望返回所有消息类型,每个消息类型及其关联字段都位于“MessageTypeField_MessageType”下。
我的“MessageTypeField_MessageTypes”表是一个相当简单的标准化策略设置,就像这样,我应该说明即使 MessageTypeID“有很多”它是唯一数据,所以它可能是:
[ID | MessageTypeID | MessageTypeFieldID]
1 63 10
1 63 11
1 63 12
现在上面的代码执行并返回一个我很满意的查询..(执行正确的 INNER JOIN)但是当我查看messageTypes.ToList()[0].MessageTypeField_MessageTypes
例如快速观察时,我希望看到1 条记录,我得到了一整套 messageTypeField_MessageType 记录~17,只过滤MessageTypeFieldID
而不是过滤MessageTypeID
。它应该在每次迭代时按消息类型 id 过滤,并且只返回一条记录。关于我做错了什么或如何实现我需要的任何想法?
对不起,这个复杂的例子,但我希望你们能帮助!