关于EF 4 vs 2010的工作。关于扩展方法的问题。需要在扩展方法上写一些帮助。
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);
}
如果有任何疑问,请先询问。谢谢。帮我比较扩展方法中的值。
错误消息为:
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
答案 0 :(得分:2)
您编写的Extension方法不知道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
}