[英]How to get unique records using LINQ when columns are all varchar
我試圖找出一種使用linq從數據庫獲取最新記錄的方法。 表中的所有字段均為varchar2。
例如,我有一張桌子:
CODE VERSION FIELD1 FIELD2 ...
AAA 0.0.1 data1 data2
BBB 0.0.2 data22 xxxxx
AAA 0.0.2 xxcxcx asdasdas
AAA 0.0.3 data11 data5555
BBB 0.0.2 dasds aasdasd
我只想回來。
AAA 0.0.3 data11 data5555
BBB 0.0.2 dasds aasdasd
我可以按CODE / VERSION將所有數據重新排序,然后將每個唯一的代碼排在前1位。 但是,這似乎在增加開銷。 有沒有更簡單的方法可以做到這一點?
編輯:我正在使用Oracle 11g。 我無法控制當前數據庫中的字段是什么。 我正在嘗試LINQ-Entities,而代碼和版本是表的關鍵。
如果您的要求類似於“ 每個唯一的代碼 ”,則通常意味着您需要使用GroupBy
。
這是LINQ-To-Object的工作示例:
var data = new List<MyData>
{
new MyData { Code = "AAA", Version = "0.0.1", Field1 = "data1", Field2 = "data20" },
new MyData { Code = "BBB", Version = "0.0.2", Field1 = "data2", Field2 = "data21" },
new MyData { Code = "AAA", Version = "0.0.2", Field1 = "data3", Field2 = "data22" },
new MyData { Code = "AAA", Version = "0.0.3", Field1 = "data4", Field2 = "data23" },
new MyData { Code = "BBB", Version = "0.0.2", Field1 = "data5", Field2 = "data24" },
};
var res = data
.GroupBy(z => z.Code) // Group by code
.Select(z => z
.OrderByDescending(z2 => z2.Version)
.FirstOrDefault()) // For each group, select the most recent one. This assumes you can order versions using their textual representation
.ToList();
編輯
看起來您無法更改存儲在Oracle數據庫中的內容。 在VERSION列上排序可能無效(可以假設您不會在9.9.9之后停止版本控制)。
您可以將所有內容加載到內存中,然后解析VERSION字段,然后進行排序。 您可以編寫存儲過程(或視圖)來有效地在數據庫服務器上執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.