我試圖找到買方的所有發票,通過買方名稱搜索(包含和等於過濾器)。尋找最乾淨的方式來做到這一點。 我有一個買家名單。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
我不知道你在做什麼,但你可能只是做一個加入 –