很多时候在我的LINQ 到 SQL http://en.wikipedia.org/wiki/Language_Integrated_Query#LINQ_to_SQL_.28formerly_called_DLINQ.29代码中,我需要“查找或创建”一个实体,如下所示:
var invoiceDb = ctx.Invoices.FirstOrDefault(a => a.InvoicerId == InvoicerId &&
a.Number == invoiceNumber);
if (invoiceDb == null)
{
invoiceDb = new Invoice();
invoiceDb.Number = invoiceNumber;
ctx.Invoices.InsertOnSubmit(invoiceDb);
}
我希望使其成为一种通用方法......有什么好的想法吗?
我想出了这些似乎对我很有效的扩展方法。
public static T FindOrCreate<T>(this Table<T> table, Func<T, bool> find, Action<T> create) where T : class, new()
{
T val = table.FirstOrDefault(find);
if (val == null)
{
val = new T();
create(val);
table.InsertOnSubmit(val);
}
return val;
}
public static T FindOrCreate<T>(this Table<T> table, Func<T, bool> find) where T : class, new()
{
return FindOrCreate(table, find, a => { });
}
它的用法如下:
var invoiceDb = ctx.Invoices.FindOrCreate(a => a.InvoicerId == InvoicerId &&
a.Number == invoiceNumber);
invoiceDb.Number = invoiceNumber;
Or
var invoiceDb = ctx.Invoices.FindOrCreate(a => a.InvoicerId == InvoicerId &&
a.Number == invoiceNumber,
a => a.Number = invoiceNumber);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)