将多列查询中的一列放入列表中

时间:2017-08-10 13:19:04

标签: c# sql lambda asp.net-core

我正在尝试将此多列查询中的列LANS放入列表中。 并将First和Last名称分成一个单独的列表。 我无法弄清楚如何使其发挥作用。

CODE:

//Resource
var ResourceFilter =  _context.INT_CertificationsXREF.Include(i => i.RIM_Resource)
    .Where(i => i.RIM_Resource.LAN == i.RIM_Resource.LAN)
    .Where(i => i.Approved == true)
    .Where(i => i.RIM_Resource.LAN != UserInformation.Globals.LANID)
    .Select( i => i.RIM_Resource.FirstName + i.RIM_Resource.LastName + i.RIM_Resource.LAN)
    .Distinct()
    .ToList();

var ResourceFilterNames = ResourceFilter.RIM_Resource.Firstname + RIM_Resource.LastName.ToList();

var ResourceFilterLANS = ResourceFilter.RIM_Resource.LAN.ToList();

Desired OutPut

ResourceFilterNames =名字" "姓氏,名字" "姓氏,等等....

ResourceFilterLANS = NQ90,RE97,I3R9,等等。

该列表也需要按顺序同步。

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题......我想你想要的是:

var ResourceFilter =  _context.INT_CertificationsXREF.Include(i => i.RIM_Resource)
    .Where(i => i.RIM_Resource.LAN == i.RIM_Resource.LAN)
    .Where(i => i.Approved == true)
    .Where(i => i.RIM_Resource.LAN != UserInformation.Globals.LANID)
    .Select( i => new {
               fullName = i.RIM_Resource.FirstName + " " + i.RIM_Resource.LastName,
               Lan = i.RIM_Resource.LAN
    })
    .Distinct()
    .ToList();

您可以检索" fullNames"的列表和" LANS"像这样

List<string> fullNames = ResourceFilter.Select(x => x.fullName).ToList();
List<string> LANS = ResourceFilter.Select(x => x.Lan).ToList();

希望有所帮助

答案 1 :(得分:0)

根据您所需的输出,我认为此解决方案适合您

var ResourceFilterNames= string.Join(",", ResourceFilter.Select(x => ( x.Firstname 
 + " " + x.LastName )));
var ResourceFilterLANS =  string.Join(",", ResourceFilter.Select(x=> x.Lan));

为了使此解决方案有效,您应该从Select删除ResourceFilter或重写如下:

 .Select( i => new { i.RIM_Resource.FirstName, i.RIM_Resource.LastName, i.RIM_Resource.LAN})

答案 2 :(得分:0)

我将使用以下类作为我的测试输入:

public class MyData
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Lan { get; set; }
}

我的第一个解决方案假设您FirstNameLastName的组合是唯一的。

要保持两个列表同步,我将使用字典:

// var resource = new List<MyData>();
var dictionary = resource.ToDictionary(r => r.FirstName + r.LastName, r => r.Lan);

我的第二个解决方案假设它们不是唯一的,所以你可以使用它:

var dictionary = new Dictionary<string, List<string>>();

foreach(var res in resource)
{
    var key = res.FirstName + res.LastName;

    List<string> value;
    if ( dictionary.TryGetValue(key, out value))
    {
        value.Add(res.Lan);
    }
    else
    {
        dictionary[key] = new List<string> {res.Lan};
    }
}