سؤال

وكان يمكن أن أقسم أن هناك طريقة تمديد بنيت بالفعل للطبقة Queryable أن أنا فقط لا يمكن العثور عليها، ولكن ربما أنا أفكر في شيء مختلف.

وأنا أبحث عن شيء على غرار:

IQueryable<Entity> en = from e in IDB.Entities select e;
en.ForEach(foo => foo.Status = "Complete");

وen.Foreach () سيكون من الضروري إجراء:

foreach(Entity foo in en){
   foo.Status = "Complete";
}

هل هذا كتبت بالفعل؟ إذا لم يكن كذلك، هل من الممكن أن أكتب قال أسلوب الإرشاد، والسماح يفضل لأي جدول LINQ وأي حقل في هذا الجدول. أين هو مكان جيد للبدء؟

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

المحلول

وهناك foreach على قائمة <>. تقريبا شيء على طول هذه الخطوط:

IQueryable<Entity> en = from e in IDB.Entities select e;
en.ToList().ForEach(foo => foo.status = "Complete");

نصائح أخرى

لا يوجد شيء في مكتبة الفئة الأساسية. كثيرة، <م> كثير المطورين وذلك في المكتبة العامة الخاصة بهم، ومع ذلك، وكان لدينا في <لأ href = "http://code.google.com/p/morelinq/" يختلط = "نوفولو noreferrer "> MoreLINQ جدا.

وانها نوع من يخالف روح LINQ، لأنه كل شيء عن الآثار الجانبية - ولكن أن يكون مفيدا حقا، لذلك أعتقد أن البراغماتية ينسخ العقيدة هنا

وشيء واحد ملاحظة - هناك حقا أي نقطة في استخدام تعبير استعلام في المثال الخاص بك. (انها ليست <م> تماما زائدة عن الحاجة، ولكن إذا كنت لا يعرض قيمة لا يهم). وحدد لا تفعل شيئا مفيدا هنا. يمكنك القيام بذلك تماما:

IDB.Entities.ForEach(foo => foo.status = "Complete");

وحتى لو كنت تريد أن تفعل واحد "حيث" أو "تحديد" فما استقاموا لكم فاستقيموا عادة استخدام نقطة تدوين:

IDB.Entities.Where(foo => foo.Name == "fred")
            .ForEach(foo => foo.status = "Complete");

وفقط استخدام تعبيرات الاستعلام حيث الواقع جعل رمز أسهل:)

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{
    foreach (var item in sequence)
    {
        action(item);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top