簡體   English   中英

LINQ查詢返回一個由多個列組成的整個對象

[英]LINQ query returning the entire object grouped by multiple columns when one is distinct

我有多種解決方案,試圖用LINQ解決,但還沒有有效的解決方案。

我有一份回來的企業列表,其中包含大量數據。 我需要保留所有這些數據,以便在對其進行分組並消除某些重復項時可以訪問它。

因此,我對分組感興趣的主要屬性是Address1,Address2和BusinessName。

我想先按公司名稱分組,然后按地址1分組,再按地址2分組,但僅當地址2不同時才分組。 原因是我可能有多種方式來寫入相同的地址,並且通常這與地址2的寫入方式不同有關,這很好,我們會立即支持,如果將其編寫為Suite 200或Ste 200,則將其處理不同。 需要這樣做,以確保在多個辦公室位於同一建築物中的情況下,我們不會消除實際差異(即Ste 200和Ste 100都是同一家企業,但辦公室不同)。 但是,我不想返回具有相同address2列表的相同地址。

var myNonDupOfficeList = officeList
    .GroupBy(o => new { o.Address1, o.Address2, o.BusinessName})
    .OrderBy(g => g.Key.BusinessName).ThenBy(g => g.Key.Address1).ThenBy(g => g.Key.Address2)
    .Select(o => o.FirstOrDefault()).ToList();

我已經編寫的代碼可以很好地解決此問題,但是問題是我丟失了我需要的所有其他數據。 如果我將這些數據包括在新的{}對象中,那么它會增加差異,從而增加我不想搜索的組的數量。 例如,我添加了城市,州和郵政編碼數據,但是出於我的意圖,這是不相關的...郵政編碼並不總是正確的數據,因此輸入錯誤郵政編碼的人會產生另一個組,例如,或者放置聖路易斯的人或聖路易斯或聖路易斯將是不同的群體。

城市,州和地址與我要分組的方式無關,但是一旦按BusinessName,Address1和Address2對數據進行分組,就需要訪問該數據。 如何使用Linq實現此目的?

我在LinqPad中針對Northwind數據庫進行了嘗試,我認為它可以滿足您的要求-

Customers
    .GroupBy(i => new { i.Country, i.City})
    .OrderBy(i => i.Key.City)
    .ThenBy(i => i.Key.Country)
    .Select(i => new { Row = i.FirstOrDefault(), Cnt = i.Count()})
    .Dump();

我包括了一個計數,所以我可以看到每個組中有多少個項目。

盡管尚需時日,但最好的想法是創建一個僅包含所需字段的類型,並在執行初始查詢時創建該類型的新實例。

public class MyBusiness
{
    public string BusinessName { get; set; }
    public string BusinessAddress1 { get; set; }
    public string BusinessAddress2 { get; set; }
}

然后

 var myNonDupOfficeList = officeList
.GroupBy(o => new { o.Address1, o.Address2, o.BusinessName })
.OrderBy(g => g.Key.BusinessName).ThenBy(g => g.Key.Address1).ThenBy(g => g.Key.Address2)
.Select(o => new MyBusiness
{
    BusinessName = o.BusinessName,
    BusinessAddress1 = o.Address1,
    BusinessAddress2 = o.Address2
}).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM