为了账号安全,请及时绑定邮箱和手机立即绑定

加入两个列表并使用 linq 选择嵌套项目

加入两个列表并使用 linq 选择嵌套项目

C#
吃鸡游戏 2021-12-05 16:57:08
我有以下课程的列表:public class SiloRelationship{    public int RelationshipType { get; set; }    public string MasterKey { get; set; }    public string SlaveKey { get; set; }    public int QueryId { get; set; }}我有以下类的第二个列表:public class SiloNode{    public string Key { get; private set; }    public string Url { get; private set; }    public List<NodeQuery> Queries { get; private set; }}其中有一个子类:public class NodeQuery{    public string Query { get; private set; }    public int Seq { get; private set; }}列表:LandingSilo.Relationships 是 SiloRelationship 的列表LandingSilo.Nodes 是 SiloNode 的列表。这是我的查询 - 有一个简单的连接,之后我需要返回 Url 和 Query 属性 - 过滤器应该从列表中生成一个 QueryNode。我们拥有的是:SiloRelationship => 1 to 1 SiloNode => 1 to many QueryNode Kvp 足以满足练习的目的,但到目前为止我看不到带有代码的 Query 属性。var query =    from r in LandingSilo.Relationships    join n in LandingSilo.Nodes on r.SlaveKey equals n.Key    where r.RelationshipType == 1 &&    n.Queries.Select(y => y.Seq).Contains(r.QueryId)任何帮助表示赞赏。
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

尝试这个:


IEnumerable<string> queries = LandingSilo.Relationships

    .Where(r => r.RelationshipType == 1)

    .Join(

        LandingSilo.Nodes, 

        r => r.SlaveKey, 

        n => n.Key, 

        (r, n) => n.Queries.SingleOrDefault(q => q.Seq == r.QueryId))

    .Where(q => q != null)

    .Select(q => q.Query);

逐行:过滤所有Relationship类型不同于 的 s 1,加入SlaveKey/Key并选择节点中唯一Seq与Relationships相等的查询QueryId。过滤null结果并选择Query属性。InvalidOperationException如果在一个节点匹配中有多个查询,这将抛出一个。


这也可以在 LINQ 关键字语法中完成,如下所示:


IEnumerable<string> queries = 

    from r in LandingSilo.Relationships

    where r.RelationshipType == 1

    join n in LandingSilo.Nodes on r.SlaveKey equals n.Key

    from q in n.Queries.SingleOrDefault(q => q.Seq == r.QueryId)

    where q != null

    select q.Query;


查看完整回答
反对 回复 2021-12-05
?
ITMISS

TA贡献1871条经验 获得超8个赞

您只需要过滤Queries. 像下面这样更改最后一个语句

select n.Queries.FirstOrDefault(q => q.Seq == q.QueryId);


查看完整回答
反对 回复 2021-12-05
  • 2 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信