[c#]LINQ 中,如何选择不同与两列

标签: Linq C#
发布时间: 2017/2/28 22:53:18
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在下面的选择查询,我需要显示不同的值,但因为我作为一个值显示 DataText 字段和可选择的是 DataValue,我怎么能不同。

所以我想我有价值的子字段的选择列表中显示的每一部分但个子字段有重复值在许多的部分记录,所以我想要显示部分具有一个分支但地方部分重复的子字段然后我将不会显示该部分。没关系的哪一部分排除时其分支学科是重复

IEnumerable<SelectListItem> pList = (from p in db.Part
                     where (p.field != null || p.field!= "")
                     select p).Distinct().OrderByDescending(l => l.ID).ToArray().Select(x => new SelectListItem


         {
                 Value = x.ID.ToString(),
                 Text = x.subfield
                 });

            ivm.Ids= pList;




<div class="bodyContent">
            <span class="leftContent"><a id="\\" href=''>
                @Html.Label("Part Number ")</a> </span><span class="rightContent">
                    @Html.ListBoxFor(model => model.SelectedPNos, Model.IDs, new { id = "partIdLst", name = "listbox", @class = "chosen-select", multiple = "multiple", data_placeholder = "Click here to Select Part Number", style = "width:90%;", tabindex = "5" })
                </span>
        </div>

解决方法 1:

据我可以理解你想要到不同的记录由 subfield 。如果如此,你可以使用 GroupBy :

var pList = db.Part.Where(p => p.field != null && p.field!= "")
             .OrderByDescending(l => l.ID)
             .AsEnumerable()
             .GroupBy(x => x.subfield)
             .Select(x => x.First())
             .Select(x => new SelectListItem
             {
                 Value = x.ID.ToString(),
                 Text = x.subfield
             });

或如果您可以使用第三方库,我推荐 DistinctBy 方法

 var pList = db.Part.Where(p => p.field != null && p.field!= "")
             .OrderByDescending(l => l.ID)
             .AsEnumerable()
             .DistinctBy(x => x.subfield)
             .Select(x => new SelectListItem
             {
                 Value = x.ID.ToString(),
                 Text = x.subfield
             });

我有点优化您的代码,通过改变 ToArrayAsEnumerable ,如果你只是想获取的结果你可以使用 AsEnumerable ,它将执行查询和枚举结果,你不需要放入集合的结果。

官方微信
官方QQ群
31647020