2017-08-30 67 views
0

我正在創建一個Web API來顯示我們系統中的忠誠計劃列表。每個忠誠度計劃都有一個超長的GUID,我想以某種方式變成一個簡單的唯一ID。使用Linq生成每個結果的ID

API旨在用ID顯示每個項目的目的是,最終用戶可以使用相同的命令和ID號碼來獲取有關忠誠度計劃的更多信息。

在SQL中,我會使用類似Rank的東西,但我不知道如何在這裏應用。

var ReturnedLoyalty = from d in db.LoyaltyCampaigns 
            where d.CampaignStart < DateTime.Now && d.CampaignStop >= DateTime.Now 
            orderby d.CampaignName ascending 
            select new { d.CampaignGUID, d.CampaignName }; 

我想替補多的d.campaignguid一組簡單的像1,2,3號......等

+0

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property –

+0

你可以這樣用一個'.Select((value,index)=> ...})'(linq to objects)...但是如果你想要一個基於整數ID ...添加一個基於整數的ID。否則,這些數字會隨着時間的推移而改變,這會讓人們感到困惑。 –

+0

SQL表由第三方軟件供應商創建。他們的軟件在幕後使用GUID列,並將它設置爲表格中的縮進列。所以我無法在SQL表上創建一個新的標識。 – BobbyDigital

回答

0

不幸的是查詢理解語法不支持的兩個參數版本select,但你可以在查詢後使用:

var ReturnedLoyalty = (from d in db.LoyaltyCampaigns 
         where d.CampaignStart < DateTime.Now && d.CampaignStop >= DateTime.Now 
         orderby d.CampaignName ascending 
         select d.CampaignName).Select((name, index) => new { ID = index, CampaignName = name});