c# - 加入两个列表并检查匹配的属性值并返回所需的数据
问题描述
我有两个列表,我想比较使用 fn_cds(List1) 和 fnctn_cd (List2) 的两个列表,并从 List2 表中获取“fn_desc”。其中List1 的'fn_cds' 属于字符串[],即表中一行中的数据将类似于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”。
解决方案
试试这个(为简单起见,我已将您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 并重新构建你的类,你可能会有一个更好的构造。
推荐阅读
- apache-nifi - How to convert CSV to JSON using Apache Nifi?
- python - what is workers parameter in word2vec in NLP
- r - R Studio 只会绘制箱线图
- android - Gradle 无法解析 github 依赖
- javascript - Css positioning, positioning issues
- javascript - for循环比reduce慢?
- excel - Excel日期格式和数值不一致
- ios - 有人知道如何使用 ionic 和 webrct cordova-iosrtc-plugin 在 ios 上显示视频流吗?
- python - Pyspark RDD“列表索引超出范围”错误
- visual-studio-2017 - ngrok - vs2017 - 尝试启动 ngrok 隧道时遇到问题