2017-08-10 50 views
0

我想將列多列查詢中的列LAN放入列表中。 並將第一個和最後一個名稱放入單獨的列表中。 我只是不知道如何使其工作。將多列查詢中的一列放入列表

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(); 

期望的輸出

ResourceFilterNames =名字 「 」姓氏,名字「」 姓氏,ECT ....

ResourceFilterLANS = NQ90,RE97,I3R9,等。

該列表還需要按同步順序排列。

+0

能否請您提供一個您想要的輸出的例子。 –

+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(); 

希望清單它有助於

+0

您的一個聖誕節。 <3 –

0

根據您所需的輸出,我認爲這個解決方案會爲你工作

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

爲了實現此解決辦法,則應該從ResourceFilter刪除Select或重寫它象下面這樣:

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

這不會工作,如果他不改變他的'選擇'聲明......他是連接值而不是選擇他們... –

+0

@ElmerDantas是的,我錯過了。謝謝你的評論。 – user2771704

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}; 
    } 
}