【问题标题】:How to filter parent list<> when we apply condition on child list?当我们在子列表上应用条件时如何过滤父列表<>?
【发布时间】:2014-11-12 08:16:55
【问题描述】:

当我们对子列表应用条件时如何过滤父列表?

public class VendorEntities
{
    public int VendorId { get; set; }     
    public string VendorName { get; set; }
    public List<ItemEntities> ItemDealdetails { get; set; }    
}

public class ItemEntities
{
    public int ItemId { get; set; }
    public string ItemName { get; set; }
    public int TenantId { get; set; }
}

List<VendorEntities> objVenderList = new List<VendorEntities>();
objVenderList = objVendorBL.GetVendorName();

var rList = (from a in objVenderList
             from b in a.ItemDealdetails
             where b.ItemName.Contains("Computer")
             orderby a.VendorName descending
             select a).ToList().Distinct();

现在我想搜索那些ItemName 包含Computer 的供应商,它存储在子列表ItemEntities 中。我怎么能这样做?请给我一些建议。

【问题讨论】:

    标签: .net linq list


    【解决方案1】:

    你可以使用Enumerable.Any:

    var rList = objVenderList
            .Where(v => v.ItemDealdetails.Any(d => d.ItemName.Contains("Computer")))
            .OrderByDescending(v => v.VendorName)
            .ToList();
    

    请注意,我省略了您的 Distinct,因为它只会删除重复的引用,直到您尚未实现 IEquatable&lt;T&gt; 或覆盖 Equals + GetHashCode

    这里查询语法相同:

    var filteredByItemNameComputer = 
        from vendor in objVenderList
        where vendor.ItemDealdetails.Any(d => d.ItemName.Contains("Computer"))
        orderby  vendor.VendorName descending
        select vendor;
    var rList=filteredByItemNameComputer.ToList();
    

    【讨论】:

    • 你发帖时我正在输入同样的内容。伟大的思想都一样。
    • 感谢@Tim,但这段代码会生成一个对象引用。错误。
    • @AjayKumarSantra:那么你还有另一个问题。为什么ItemDealdetailsItemName 为空?
    • 当我转换结果“ToList()”时显示错误,并且没有“objVenderList”不为空,但某些子列表“ItemEntities”可以返回空值。
    • @AjayKumarSantra:你还没有提到,然后使用.Where(v =&gt; v.ItemDealdetails!=null &amp;&amp; ... 或在查询语法中:where vendor.ItemDealdetails!=null &amp;&amp;...
    猜你喜欢
    • 2023-03-14
    • 2018-10-10
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2022-11-26
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多