سؤال

ولدي فئة الحجز

public class Booking
    {
        public int Id { get; set; }

        public string From { get; set; }

        public string To { get; set; }
    }

وأنا إنشاء قائمة على الحجوزات بمساعدة LINQ وأريد بعض آلية التي أريد أن الإنشاء التلقائي الملكية 'هوية' إلى زيادة بمقدار 1.

وأي بمعنى. إذا الحجوزات قائمة تحتوي على 10 وجوه الحجز ثم الكائن الأول رقم = 1، والثانية رقم = 2 وهكذا واحدة ...

وأي اقتراح

هل كانت مفيدة؟

المحلول

وفيما يلي سوف أعطيك قائمة الحجوزات جديد مع مؤشر المتوقعة إلى ممتلكات ID الخاص بك. وربما كنت تستطيع أن تفعل شيئا مشابها لهذا لتحديث القائمة الموجودة مع مؤشر ...

var myBookings = myExistingListOfTen.Select((b, index) => new Booking
                 {
                     Id = index + 1, 
                     From=b.From, 
                     To=b.To
                 });

نصائح أخرى

وليس لطيفا، ولكنها ستعمل. هو خدعة لاستخدام الزائد توفير فهرس العنصر.

list = list.Select((item, index) => { item.Id = index; return item; });

وهذا سيتم تحديث الحجوزات الحالية، ولكن يمكن أيضا تحديد مثيل جديد مع مجموعة الهوية وتجنب هذا return قبيحة على حساب تكرار الحجوزات وفقدان المراجع كما يقترح سكوت آيفي. وبالطبع كان لديك لإضافة واحد إذا كنت تريد هويات المستندة إلى واحد.

وأجد أنه من الغريب بعض الشيء لتوليد هويات بهذه الطريقة أيضا، ولكن قد يكون حلا مقبولا إذا كنت تحصل على قائمة الحجوزات الجديدة دون هوية وتريد أن تولد لهم. في هذه الحالة يجب الواضح أن لا تبدأ معرفات مع صفر أو واحد، ولكن أكبر معرف تعيينها بالفعل زائد واحد.

وبالتأكيد إذا كانت خاصية على الكائن الذي تريد القيمة إلى أن تكون متسقة من الاحتجاج على الاحتجاج. حجز 'A' لا ينبغي أن يكون معرف مختلفة تبعا للمكان الذي كان موجودا في القائمة. إذا كنت مجرد الرغبة في فهرس العنصر في القائمة، لا تخزينه كخاصية في هذا البند، وإنما هي مستمدة من موضعه في القائمة.

public class Booking
{
    private static int BookingCount = 1;

    public Booking()
    {
       Id = BookingCount++;
    }

    public int Id { get; set; }

    public string From { get; set; }

    public string To { get; set; }
}

ولست متأكدا إذا فهمت سؤالك الحق، ولكن هل يمكن دائما

ID = bookings.Select(b=>b.ID).Max()+1;

ولست متأكدا إذا كان هذا هو هذه فكرة جيدة (لن يكون performant للاوبر).

وعلى الرغم من أنني أتفق معtvanfosson (+1)، إذا كنت تريد حقا أن إبقاء ID في Booking وأعتقد أن هذا يجب أن ستيد على بناء الحجز. هل يمكن أن يكون شيء من هذا القبيل سياق الحجز حيث كل سياق من شأنه أن يخلق الحجوزات مع معرفات مسلسل:

    public class Booking
    {
        protected Booking() { }
        public int Id { get; set; }

        public string From { get; set; }

        public string To { get; set; }
    }

    public class BookingContextFactory
    {
        private int count;

        public BookingContextFactory() : this(0) { }
        public BookingContextFactory(int startValue) 
        {
            count = startValue;
        }

        public Booking CreateBooking(string from, string to)
        {
            return new InternalBooking { Id = count++, From = from, To = to };
        }

        private class InternalBooking : Booking
        {
            public InternalBooking() : base() { }
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top