首页 > 解决方案 > 如何使用两个连接表 a 和 B 的列表编写 linq 查询,然后按 a 的 id 分组,以及 B 中的连接行数

问题描述

如何使用两个连接表 A 和 B 的列表编写 Linq 查询,然后按 A 的 id 分组,以及 B 中的连接行数

例如

class A{
   int Id,
   int BId,
   string AName
};

class B{
   int Id,
   string description
};

并显示如下(A 与 B 连接后)A.Bid = B.Id

A Id |  count(Id) | AName

坦率地说,我必须实现从 PHP 到 LINQ 的以下查询。所有依赖项都写在下面的查询中:

select("asset.id as Id,asset.AssetBundleID as AssetBundleID,asset.GUID as GUID,asset.Name as Id,asset.Name as Id,asset.DisplayName as DisplayName,asset.Description as Description,asset.Category as Category,asset.TexturesSize as TexturesSize,asset.TexturesFileSize as TexturesFileSize,asset.OthersSize as OthersSize,asset.id as Id,asset.OthersFileSize as OthersFileSize,count(*) as InstancesCount")
-> from ("asset")
->join('左连接',"assetinstance"," assetinstance. AssetId= asset. Id")
->groupBy("asset.Id")

标签: c#linq

解决方案


你的意思是这样的吗?

using System;
using System.Collections.Generic;
using System.Linq;

public class A 
{
    public int Id {get; set;}
    public int BId {get; set;}
    public string AName {get; set;}
}

public class B{
    public int Id {get; set;}
    public string description{get; set;}
}


public class Program
{
    private static List<A> _aList = new List<A>();  
    private static List<B> _bList = new List<B>();  

    public static void Main()
    {
        Seed();

        var query =
            from b in _bList
            group b by b.Id into g
            join a in _aList on g.FirstOrDefault().Id equals a.BId         
            select new { A_ID = a.Id, Cnt = g.Count(), AName = a.AName};

        Console.WriteLine("A_ID | count(Id) | AName");
        foreach(var row in query) 
        {
            Console.WriteLine(string.Join(" | ", new string[]{row.A_ID.ToString(), row.Cnt.ToString(), row.AName}));
        }
    }

    public static void Seed() 
    {       
        _aList.Add(new A{Id=1, BId=1, AName="A1"});
        _aList.Add(new A{Id=2, BId=1, AName="A2"});
        _aList.Add(new A{Id=3, BId=1, AName="A3"});
        _aList.Add(new A{Id=4, BId=2, AName="A4"});

        _bList.Add(new B{Id=1, description="B1"});
        _bList.Add(new B{Id=2, description="B2"});
    }
}

看我的小提琴https://dotnetfiddle.net/NlAX5V


推荐阅读