我有一个列表 GroupMembershipValidList ,其中包含GroupMembershipUploadInput类型的对象。
此GroupMembershipUploadInput类定义类似于
public class GroupMembershipUploadInput
{
public string chpt_cd { get; set; }}
public string cnst_last_nm { get; set; }
public string appl_src_cd { get; set; }
}
为简单起见,我简化了定义。
现在我有另一个列表 _validChapterCodes (public List<ChapterCodeValidationOutput> _validChapterCodes { get; set; }
)
包含
类型的对象public class ChapterCodeValidationOutput
{
public string chpt_cd { get; set; }
public string appl_src_cd { get; set; }
}
所以,我想要做的是..如果列表A中的chpt_cd与列表B匹配,则填充列表B中的appl_src_cd名称以列出A对象。
我如何在LINQ中执行此操作?
我试过......
gmvo.GroupMembershipValidList.GroupMembershipUploadInputList.Where(x => gmvo._validChapterCodes.Contains(x.chpt_cd)).Select(y => y.appl_src_cd);
但我知道我做得不好。
答案 0 :(得分:1)
LINQ有功能方法,这意味着它是从一组现有值中获取值,而不是操纵现有值。
所以你不能在这里避免至少一个foreach
。我会这样做:
foreach(var chapter in _validChapterCodes)
{
ChapterCodeValidationOutput output = GroupMembershipValidList.FirstOrDefault(e =>
e.chpt_cd == chapter.chpt_cd);
if (input != null) chapter.appl_src_cd = input.appl_src_cd;
}
如果没有匹配的元素, FirstOrDefault()
会返回输入列表中第一个匹配chpt_cd
或null
的元素。
编辑:从你的问题我不确定你是否想要那样或反过来(什么是列表A 和列表B ?)。所以为了完整性,另一种方式:
foreach(var input in GroupMembershipValidList)
{
var chapter = _validChapterCodes.FirstOrDefault(e =>
e.chpt_cd == input.chpt_cd);
if (chapter != null) input.appl_src_cd = chapter.appl_src_cd;
}
答案 1 :(得分:1)
您可以使用LINQ表达式。
var a = new List<GroupMembershipUploadInput>
{
new GroupMembershipUploadInput() {chpt_cd = "A" },
new GroupMembershipUploadInput() {chpt_cd = "A2"" },
new GroupMembershipUploadInput() {chpt_cd = "A3" }
};
var b = new List<ChapterCodeValidationOutput>
{
new ChapterCodeValidationOutput() {chpt_cd = "A", appl_src_cd = "ACode"},
new ChapterCodeValidationOutput() {chpt_cd = "C2", appl_src_cd = "C22"},
new ChapterCodeValidationOutput() {chpt_cd = "A3", appl_src_cd = "A33"}
};
var result = a.Select(s => new GroupMembershipUploadInput
{
chpt_cd = s.chpt_cd,
appl_src_cd = b.Any(u => u.chpt_cd == s.chpt_cd) ?
b.First(v => v.chpt_cd == s.chpt_cd).appl_src_cd:string.Empty
}).ToList();
假设a是GroupMembershipUploadInput
的集合,b是ChapterCodeValidationOutput
的集合