我有两个列表,我想使用fn_cds(List1)和fnctn_cd(List2)比较两个列表,并从List2表中获取'fn_desc'。如果List1的'fn_cds'是string [],则表中一行中的数据将类似于ex {fn1,fn2,fn3}。 数据'fnctn_cd'将出现在表中的是字符串类型,即第一行中的fn1,第二行中的fn2等。我想将这两个列表与List1的fn_cds与List2的'fnctn_cd'进行比较,并获得与匹配的'fnctn_cd'对应的'fn_desc'。
public class List1
{
public string[] fn_cds { get; set; }
public string fn_desc { get; set; }
public List<List2> List2{ get; set; }
}
public class List2
{
public string fnctn_cd { get; set; }
public string fn_desc { get; set; }
}
public ActionResult Index()
{
List<List1> list1= new List<List1>();
List<List2> list2= new List<List2>();
IEnumerable<List1> model = userGroupRepository.GetAllUserGroup().Select(o => new List1
{
fn_cds = o.fn_cds,
fn_desc = o.fn_desc
});
list1 = model.ToList();
IEnumerable<List2> model1 = userGroupRepository.GetAllFunctions().Select(o => new List2
{
fnctn_cd = o.fnctn_cd,
fn_desc = o.fn_desc
});
list2 = model1.ToList();
}
我尝试遍历如下所示的两个列表,但没有得到预期的结果。
for(var i = 0; i < list1.Count; i++)
{
if(list1[i].fn_cds.Contains(list2.Any(o => o.fnctn_cd)))
{
list1[i].fn_desc = list2[i].fn_desc;
}
}
样本表结构
Table1(list1) Table2(list2)
---------------- -------------------------
fn_cds functn_cd | fn_desc
--------------- -------------------------
{fn1,fn2,fn3} fn1 | function1
{fn1,fn2} fn2 | function2
{fn3} fn3 | function3
基于与fnctn_cd(来自list2)匹配的fn_cds [](来自list1),我的预期结果应该从list2返回list1中的'fn_desc'。
答案 0 :(得分:1)
尝试一下(为简单起见,我将您的List<List1>
更改为List<string>
List<string> model = new List<string> { {"fn1,fn2"}, {"fn1"} };
List<List2> lookup = new List<List2>
{
new List2 {fn_desc = "Fist", fnctn_cd = "fn1"},
new List2 {fnctn_cd = "fn2", fn_desc = "Second"}
};
var result = model.Select(x => x.Split(',')
.Select(x1 => lookup.Where(l => l.fnctn_cd == x1).Select(l => l.fn_desc).FirstOrDefault())
.ToList()).ToList();
这看起来很丑陋,但感觉像是一个hack,我认为如果将List2更改为Dictionary并重新构建类,则可能会具有更好的构造。