我试图找到买方的所有发票,通过买方名称搜索(包含和等于过滤器)。寻找最干净的方式来做到这一点。 我有一个买家名单。C#LINQ。按对象名称属性或名称部分搜索对象
List <Buyer> AllBuyers;
,买受人为:
public class Buyer
{
public string BuyerIdentifier{ get; set; }
public string Name { get; set; }
}
我有发票的买家名单。
List <Invoice> AllInvoices;
而且发票是
public class Invoice
{
public string InvoiceID { get; set; }
public string BuyerID { get; set; }
public string Amount{ get; set; }
}
我目前在做什么:
List<string> BuyerIDs = new List<string> { };
foreach (Invoice inv in AllInvoices)
{
if (!(BuyerIDs.Contains(inv.BuyerID)))
{
// add BuyerID to list if it's not already there. Getting id's that are present on invoices and whose Buyer names match using contains or equals
BuyerIDs.Add(AllBuyers.First(b => b.BuyerIdentifier == inv.BuyerID
&& (b.Name.IndexOf(SearchValue, StringComparison.OrdinalIgnoreCase) >= 0)).BuyerIdentifier);
}
}
Invoices = AllInvoices.FindAll(i=> BuyerIDs.Contains(i.BuyerID));
LINQ查询语法有点容易,我比LINQ方法加入明白。所以经过下面我的答复我现在这样做:
Invoices = (from buyer in AllBuyers
join invoice in AllInvoices on buyer.BuyerIdentifier equals invoice.BuyerID
where buyer.Name.IndexOf(SearchValue, StringComparison.OrdinalIgnoreCase) >= 0
select invoice).ToList();
请问你的代码的工作?如果确实如此,并且您只是希望改进代码,则此问题可能属于[Code Review Stack Exchange](https://codereview.stackexchange.com/),而不是此处。否则,你有什么问题,或者你看到了什么错误? –
它的工作原理,我只是想知道是否有一个更好的方式在LINQ做到没有foreach循环,如果条件。 – Razkar
我不知道你在做什么,但你可能只是做一个加入 –