Kayıtlara otomatik sıra numarası verme
Bir projede şöyle bir senaryo çıktı karşıma; Bir tablomuz var ve bu tabloda bulunan OrderNumber kayıtların hangi sırada görüneceğini tutuyor. Admin panelinde Otomatik yerleştir adında bir CheckBoc var ve kullanıcı buna tıklayınca database'de boş olan sıra numarasını alıp gelmesi gerekiyor. Buraya kadar her şey normal. Eğer şöyle düşünürsek; kullanıcı isterse kendisi sıra numarası girecek isterse otomatik yerleştirecek. Olduki kullanıcı tembel gününde ve tüm kayıtları aynı sayı ile kayıt etti. Mesela 100 adet veritabanı kaydının 70 tanesini 12 sıra numarası ile kayıt etti. Sıralamada bir sorun olmaz fakat daha sonra bunları düzeltmek ölüm olabilir. Bunu çözmek için aşağıdaki gibi bir metod yazdım ve sizlerle paylaşmak istedim.Dikkat ! Linq ve Lambda Expession kullandım.Çok esnek ve düzenli bir yapı oldu. Eğer bir gün böyle bir şeye ihtiyaç duyarsanız kullanın diye kodları paylaşıyorum.
Bir projede şöyle bir senaryo çıktı karşıma; Bir tablomuz var ve bu tabloda bulunan OrderNumber kayıtların hangi sırada görüneceğini tutuyor. Admin panelinde Otomatik yerleştir adında bir CheckBoc var ve kullanıcı buna tıklayınca database'de boş olan sıra numarasını alıp gelmesi gerekiyor. Buraya kadar her şey normal. Eğer şöyle düşünürsek; kullanıcı isterse kendisi sıra numarası girecek isterse otomatik yerleştirecek. Olduki kullanıcı tembel gününde ve tüm kayıtları aynı sayı ile kayıt etti. Mesela 100 adet veritabanı kaydının 70 tanesini 12 sıra numarası ile kayıt etti. Sıralamada bir sorun olmaz fakat daha sonra bunları düzeltmek ölüm olabilir. Bunu çözmek için aşağıdaki gibi bir metod yazdım ve sizlerle paylaşmak istedim.Dikkat ! Linq ve Lambda Expession kullandım.Çok esnek ve düzenli bir yapı oldu. Eğer bir gün böyle bir şeye ihtiyaç duyarsanız kullanın diye kodları paylaşıyorum.
public int GetEmptySequenceNumber()
{
int EmptyNumber = 1;
bool isNoContains = true;
var EmptySequenceNumber = from g in cont.Groups
where g.LanguageID == drpLng.SelectedValueToInt
orderby g.OrderNumber
select g.OrderNumber;
int[] orderNumbers = EmptySequenceNumber.ToArray();
for (int i = 1; i < orderNumbers.Max(); i++)
{
if (!orderNumbers.Contains(i))
{
EmptyNumber = i;
isNoContains = false;
break;
}
}
if (isNoContains)
{
try
{
EmptyNumber = (from g in cont.Groups
where g.LanguageID == drpLng.SelectedValueToInt
select g.OrderNumber).Max();
}
catch (InvalidOperationException)
{
EmptyNumber = -1;
}
catch (Exception)
{
EmptyNumber = -1;
}
if (EmptyNumber > -1)
EmptyNumber++;
else
EmptyNumber = 1;
}
return EmptyNumber;
}

Ana Sayfa