gpt4 book ai didi

c# - 即使存在 linq to sql 连接,子集合也不会过滤

转载 作者:行者123 更新时间:2023-11-30 22:50:08 24 4
gpt4 key购买 nike

我有一个 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 进行过滤,并且只返回一条记录。关于我做错了什么,或者我如何才能达到我的需要有什么想法吗?

抱歉,这个例子很复杂,但我希望你们能帮忙!

最佳答案

如果您正在查看导航属性(即 mt 的某个子集合),那么这与您的查询无关;听起来你想使用 AssociateWith .如果您只是想过滤子数据,这将在很大程度上替换连接...

关于c# - 即使存在 linq to sql 连接,子集合也不会过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/728828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com