2013-10-03 3 views
0

Работайте над EF 4 по сравнению с версией 2010.Face по методу расширения. Помогите написать метод расширения.Как написать метод расширения на ef

private void FillBillTaxOnSave(BillController objController, List<BilBillTAX> _entityTax, BilBillMaster objEntity) 
     { 
      foreach (BilBillTAX itemTax in _entityTax.FindAll(item => item.Action != Entity.ActionMode.Delete)) 
      { 
       BilBillDetail tempDetail = objEntity.BilBillDetails.FirstOrDefault(item => item.BillDetailID == itemTax.BillDetailID); 
       if (tempDetail != null) 
       { 
        if (itemTax.Action == XERP.Entity.ActionMode.Add) 
        { 
         tempDetail.BilBillTAXes.Add(itemTax); 
        }      
       } 
      } 
     } 

Хотите написать метод расширения для вышеуказанного синтаксиса.

BilBillMaster objEntity = new BilBillMaster(); 
      List<TransactionItem> oList = new List<TransactionItem>(); 
      oList.SetSave(objEntity, item => item.Action != Entity.ActionMode.Delete, objEntity.BilBillDetails); 

Мой метод расширения

public static IEnumerable<TSource> SetSave<TSource, T, TSourceDetail>(this IEnumerable<TSource> source, T entObj, Func<TSource, bool> predicate, IEnumerable<TSourceDetail> sourceDetail) 
     { 
      List<TSource> list = new List<TSource>(); 

      foreach (var element in source.Where(predicate)) 
      { 

       if (element.Action == XERP.Entity.ActionMode.Add) 
       { 
        sourceDetail.Add(element); 
       }    
      } 
      return list; 
     } 

Мой выше синтаксис ниже часть показывает мне ошибку.

 if (element.Action == XERP.Entity.ActionMode.Add) 
     { 
      sourceDetail.Add(itemTax); 
     } 

Если есть какие-либо запрос, пожалуйста, спросите .thanks в advanced.Help мне для сравнения значений в методе расширения.

Сообщения об ошибках:

2) does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'System.Collections.Generic.IEnumerable<TSourceDetail>' could be found 

ответ

2

метод расширения, что вы написали не имеет ни малейшего представления о типе TSource. Чтобы он мог понять, вам нужно указать ограничения, которые ограничивают тип TSource независимо от того, что вы хотите.

В примере, который вы указали, вы должны добавить что-то вроде ниже.

public static IEnumerable<TSource> SetSave<TSource, T, TSourceDetail>(this IEnumerable<TSource> source, T entObj, Func<TSource, bool> predicate, IEnumerable<TSourceDetail> sourceDetail) where TSource : TransactionItem 
{ 
    //Your logic goes here 
} 
+0

пользователь1667253 благодарит за ответ, не могли бы вы помочь мне на sourceDetail.Add (element); проблема. «Как я ошибаюсь» не содержит определения для «Добавить» и никакого метода расширения «Добавить» , принимающего первый аргумент типа «. Спасибо за ответ снова – shamim

+0

Я должен был упомянуть, вы можете указать несколько ограничений для каждого типа , просто добавьте несколько условий. где TSource: ClassName, где TSourceDetail: ClassName. ограничения поддерживают различные параметры, а не только имя класса ссылаются на [link] (http://msdn.microsoft.com/en-us/library/d5x73970.aspx) для получения дополнительной информации – user1667253

Смежные вопросы