当前位置: 首页 > 知识库问答 >
问题:

Linq,EF Core-对一个字段进行分组,并使用其他字段从其他表中获取数据列表

公西国发
2023-03-14
    Id T_Id
    4   2 
    6   5
    6   7
    T_Id  fname lname
    2     mary   smith
    5     john    pope
    7     steve   blair
    public class SomeView
    {
       public int Id {get; private set;}
       public int T_Id { get; private set; }

       public User User { get; set; } //can't navigate here
    }

    public class User
    {
       public int T_Id { get; set; }
       public string fname {get; set;}
       public string lname{get; set;}

       public SomeView SomeView{ get; set; } //can't navigate here
    }

由于SomeView是SQL视图,所以数据库中没有定义外键约束。不能将导航与QueryType一起使用。所以用户和SomeView之间的映射是不可能的,或者我不知道该怎么做。

     public class SomeViewModel
     {
        public int Id { get;  set; }
        public List Users{get; set;}
     }

finally my linq in progress - 

    from t in SomeView
    group new {t} by t.Id into grp
    select new SomeViewModel{
       Id = grp.Key,
       Users = grp.Select(x => x.t.User).ToList()
       //need help here to get Users based on T_Id
      }

最终的API数据输出应该是以下格式。

[{
  "Id" : "4",
  "users":[{
         "T_Id": 2,
         "fname": "mary",
         "lname": "smith"
      }]
},
{
  "Id" : "6",
  "users":[{
         "T_Id": 5,
         "fname": "john",
         "lname": "pope"
      },
      {
         "T_Id": 7,
         "fname": "steve",
         "lname": "blair"
      }
      ]
}]

共有1个答案

禹正阳
2023-03-14

<罢工> 首先,我认为您可以使用任何序列化程序将对象转换为您想要的格式。

var serialized = JsonConvert.SerializeObject(data)

第二,回到你的问题,这里是代码。但是,您需要在变量周围添加“为了可读性,去掉我添加的字符串连接”。此外,这段代码是针对您的问题的,为了更通用的解决方案,请使用第一种方法。

var mainData = string.Join(',', data.Select(x => $" {{ {nameof(x.Id)} :  {x.Id}, " +
                                                           $"{nameof(User)}s: " +
                                                           $"[ {string.Join(',', x.Users.Select(y => $"{{ {nameof(User.T_Id)} : {y.T_Id} }}"))}]" +
                                                           $"}}"));
var result = $"[{mainData}]" ;

<罢工>

        var someViewsUsersJoin = someViews.Join(users, l => l.t_id, r => r.t_id, (someView, user) => new {someView, user});

        var result = someViewsUsersJoin.GroupBy(x => x.someView.id).Select(x => new SomeViewModel()
        {
            Id = x.Key,
            Users = x.Select(y => y.user).ToList()
        });
 类似资料:
  • 本文向大家介绍从由SAP HANA中其他字段分组的表的同一行中获取最大日期和其他字段,包括了从由SAP HANA中其他字段分组的表的同一行中获取最大日期和其他字段的使用技巧和注意事项,需要的朋友参考一下 您已完成了部分纠正,但只差了一步就获得了预期的结果。分组后需要从结果中选择行之一的情况,请使用等级编号或等级函数。 您需要根据需求对数据进行分区,然后根据需求对它们进行排序,然后选择所需的行。 示

  • 如果存在其他字段,我需要执行字段验证(可以是值之一)。 关于如何验证一个类中的多个字段并相互附加条件,有一个很好的答案。 如何将和传递给验证器。

  • 在我的帖子页面(常规帖子类型)中,我设置了一个ACF关系字段。在这个里面,我可以选择公司名称,这些名称都在directory_listings的职位类型下。 现在,我在directory listings页面上有以下代码,因此使用simply get_字段不起作用,因为这些值不在该页面上,而是在POST类型的其他位置。 因此不确定如何获取信息。 目录_LISTINGS post type下某个页面

  • 我有一个自定义类数据列表,我想根据一个字段和值应该是另一个字段对它们进行分组。以下面的例子为例。 现在我想基于类对这些数据进行分组。预期的输出应该是一个映射,其中包含作为类的键和作为学生姓名列表的值。 我的代码是这样的:

  • 所以我需要一个类来保存一个玩家名和他们的分数。在另一个类中,我必须列出玩家的名字和分数,并将分数从最高到最低排序。我如何只得到int分数来整理它呢?

  • 我有一个名为Trade的实体,它可以映射到包含属性的表。这个实体也有一个字段,存储来自另一个表的值。我的贸易表包含第二个表的主键。我知道如何获得整个第二个表作为实体在我的贸易实体,但我只想要1列。 如你所见,我尝试了,但是连接是在贸易实体的主密钥上执行的。我如何使用注释从贸易表中选择外键,将其连接到第二/第三表,并直接只从col2/col3中获取值?任何建议都很感激 餐桌贸易: 表2: 表3: 现