我已經創建了一個匹配的方法,基本上在Person
對象,調用一個地址服務,然後嘗試做一個匹配首先嚐試像like然後如果這不起作用,它將房屋名稱/號碼與saon
信息(平面1a等)連接起來,看看是否有效。通過檢查,如果不爲空仍然分配爲空
如果它找到了一個匹配,我需要將匹配的地址存儲在我的變量matchingAddress
中,然後進一步處理該方法的其餘部分,我爲了清晰起見將其排除在外。
問題
我想我有我的lamda
語句的問題,在第二IF
與我同if語句返回true,我拖放到指定代碼但它是調試的人即使IF
聲明旨在檢查它不是null
,也會設置爲空。
任何人都可以解釋這裏發生了什麼?
private void AttemptMatch(Person person, string username)
{
var postcode = person.Postcode;
List<JsonAddressModel> Addresses = _service.GetAddress(postcode); //returns a list of addresses for that persons postcode
JsonAddressModel matchingAddress = new JsonAddressModel();
//1.) Access the Service and see if theres a straight forward match
if (Addresses.FirstOrDefault(x => x.paon.Trim() == person.AddressLineOne && x.thorofare.Trim() == person.AddressLineTwo) != null)
{
matchingAddress = Addresses.First(x => x.paon.Trim() == person.AddressLineOne && x.thorofare.Trim() == person.AddressLineTwo);
}
//2.) try and combine the paon and saon and see if that matches address line one
if (Addresses.Where(x => String.Format("{0} {1}", x.paon.Trim(), x.saon.Trim()) == person.AddressLineOne && x.thorofare.Trim() == person.AddressLineTwo) != null)
{
matchingAddress = Addresses.Where(x => String.Format("{0} {1}", x.paon.Trim(), x.saon.Trim()) == person.AddressLineOne && x.thorofare.Trim() == person.AddressLineTwo).FirstOrDefault();
}
if (matchingAddress != null)
{
//rest of method to complete matching process for matched person
}
else
return;
}
我應該說List.Where或List.FirstOrDefault? – JsonStatham 2015-04-01 13:42:40
如果'FirstOrDefault'調用沒有自己的lambda,那麼'Where''後面跟'FirstOrDefault'可以總是(我認爲)被合併爲一個'FirstOrDefault'調用 - 很容易(如這裏)在哪裏並且將其lambda放在'FirstOrDefault'中),或者如果兩個lambda必須被組合,則需要更多努力。有些工具(比如Resharper)甚至會在你寫'Where().FirstOrDefault()'時提醒你。 –
2015-04-01 13:55:23
Resharper會爲您解答;)。它表明,每次鏈接一個Where和First [OrDefault]或Single [OrDefault] – Juan 2015-04-02 16:25:14