Linq加入克隆

时间:2017-12-09 04:52:52

标签: c# linq

我有一系列对象,其类型具有许多属性,我想将其与另一个序列连接,并设置从第二个序列获取的值。但是因为有许多属性我不喜欢通过执行所有这些属性赋值来创建新的匿名类型。有没有更好的方法在单个linq查询中执行此操作(尝试使用let成功)

var x = from lt in legalTerms
join le in legalEntities on lt.LegalEntityCode equals le.Code
select new {a = lt.a, b = lt.b, c = le.c, d = lt.d .... z=lt.z} // don't like

我需要一个类似legalTerms的序列,其中的项目具有从legalEntities更新的一个属性 希望有某种方法来克隆le并设置一个属性c = le.c而不使用反射等

基本上这是我想知道在linq语句中可能的

        foreach (var lt in legalTerms)
        {
            foreach (var le in legalEntities)
            {
                if (le.Code == lt.LegalEntityCode)
                {
                    lt.LegalEntity = le.Name;
                }
            }
        }

1 个答案:

答案 0 :(得分:3)

这个怎么样

var map = new Func<LegalTerm, LegalEntity, LegalTerm>((term, entity) =>
{
    term.LegalEntity = entity.Name;
    return term;
});

var query = from lt in legalTerms
            join le in legalEntities 
                on lt.Code equals le.LegalEntityCode
            select map(lt, le);

知道你有某种类似于下面的结构

public class LegalTerm
{
    public string Code { get; set; }
    public string LegalEntity { get; set; }
    public string a { get; set; }
    public string b { get; set; }
    public string c { get; set; }
    public string d { get; set; }
}

public class LegalEntity
{
    public string LegalEntityCode { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}