使用Linq生成每个结果的ID

问题描述:

我正在创建一个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

不幸的是查询理解语法不支持的两个参数版本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});