Linq用join更新

时间:2018-06-28 13:16:41

标签: c# linq

我有两个收藏夹

    <p:selectOneMenu id="qupdate" value="#{object.pquantity}">

<f:selectItem styleClass="form-control"
                            itemLabel="-- SELECT QUANTITY -- " itemValue=""
                            noSelectionOption="true" />

                        <f:selectItems  value="#{selectonemenu.quantoptions}" var="f"
                            itemLabel="#{f}" itemValue="#{f}" />


                     <p:ajax execute="qupdate" event="change"
                            listener="#{Bean.quantitychange(object.pquantity, object.id)}" /> 


                    </p:selectOneMenu>

,我需要使用 db_materials 集合中的 ValueColumn 更新材料集合中的所有 Value 属性。

如何执行此操作?

4 个答案:

答案 0 :(得分:1)

您也可以不加入联接而这样做。 尝试以下代码段:

materials.ForEach(x => x.Value = db_materials.FirstOrDefault(y => y.Number == x.Number).ValueColumn);

ForEach()将更新原始实例本身中的值。无需使用循环或联接。

答案 1 :(得分:1)

您也可以使用AND查询来更新主集合,为此您需要与第一列连接,然后与第二列连接where子句以进行更新。您可以在此处查看示例, https://codeshowtime.blogspot.com/2020/01/linq-tricks.html

答案 2 :(得分:0)

这里没有连接:

  materials =  materials.Select(c => { c.Value = db_materials.Where(dbm => dbm.Number == c.Number).ToList().FirstOrDefault().Value; return c; }).ToList();

答案 3 :(得分:0)

我测试了以下代码,并且有效

            var joins = from material in materials
                        join db_material in db_materials on material.Number equals db_material.Number
                        select new { material = material, db = db_material};

            foreach (var join in joins)
            {
                join.material.Value  = join.db.ValueColumn;
            }