C# using语句中的可选上下文参数
我有这个方法C# using语句中的可选上下文参数,c#,entity-framework,using,optional-parameters,C#,Entity Framework,Using,Optional Parameters,我有这个方法 public static List<_Account> Get(_User user, string name = null, SearchType sName = SearchType.Equals) { using (Context context = new Context()) { IQueryable<_Account> query = context.Accounts; if (!string.IsNullOrEmpty
public static List<_Account> Get(_User user, string name = null, SearchType sName = SearchType.Equals)
{
using (Context context = new Context())
{
IQueryable<_Account> query = context.Accounts;
if (!string.IsNullOrEmpty(name) && sName == SearchType.Equals)
query = query.Where(r => r.Name.Equals(name));
if (!string.IsNullOrEmpty(name) && sName == SearchType.StartsWith)
query = query.Where(r => r.Name.StartsWith(name));
if (!string.IsNullOrEmpty(name) && sName == SearchType.Contains)
query = query.Where(r => r.Name.Contains(name));
return query.ToList();
}
}
public static List Get(_useruser,string name=null,SearchType sName=SearchType.Equals)
{
使用(上下文=新上下文())
{
IQueryable query=context.Accounts;
如果(!string.IsNullOrEmpty(name)&&sName==SearchType.Equals)
query=query.Where(r=>r.Name.Equals(Name));
如果(!string.IsNullOrEmpty(name)&&sName==SearchType.StartsWith)
query=query.Where(r=>r.Name.StartsWith(Name));
如果(!string.IsNullOrEmpty(name)&&sName==SearchType.Contains)
query=query.Where(r=>r.Name.Contains(Name));
返回query.ToList();
}
}
这是可行的,但当我从另一个已经定义了上下文的方法调用此方法时,我希望重用该上下文。我将添加一个可选参数
public static List<_Account> Get(..., Context ctx = null) {...
公共静态列表Get(…,Context ctx=null){code>。。。
如果
ctx!=null
我希望该上下文被使用而不是在末尾被释放。否则我希望在using中创建的上下文被使用并在方法末尾被释放。您可以将null放入using块中,因此以下操作有效:
public static List<_Account> Get(_User user, Context contextProvided = null, string name = null, SearchType sName = SearchType.Equals)
{
using (Context contextInner = (contextProvided == null ? new Context() : null)) //magic here
{
Context context = contextProvided ?? contextInner; //magic here
IQueryable<_Account> query = context.Accounts;
if (!string.IsNullOrEmpty(name) && sName == SearchType.Equals)
query = query.Where(r => r.Name.Equals(name));
if (!string.IsNullOrEmpty(name) && sName == SearchType.StartsWith)
query = query.Where(r => r.Name.StartsWith(name));
if (!string.IsNullOrEmpty(name) && sName == SearchType.Contains)
query = query.Where(r => r.Name.Contains(name));
return query.ToList();
}
}
您可以将null放入using块中,因此以下操作有效:
public static List<_Account> Get(_User user, Context contextProvided = null, string name = null, SearchType sName = SearchType.Equals)
{
using (Context contextInner = (contextProvided == null ? new Context() : null)) //magic here
{
Context context = contextProvided ?? contextInner; //magic here
IQueryable<_Account> query = context.Accounts;
if (!string.IsNullOrEmpty(name) && sName == SearchType.Equals)
query = query.Where(r => r.Name.Equals(name));
if (!string.IsNullOrEmpty(name) && sName == SearchType.StartsWith)
query = query.Where(r => r.Name.StartsWith(name));
if (!string.IsNullOrEmpty(name) && sName == SearchType.Contains)
query = query.Where(r => r.Name.Contains(name));
return query.ToList();
}
}
当然,我尝试了以下
使用(Context-Context=contextProvided??new-Context()){
但我只是想…谢谢你的回答,这应该work@fix我把它改成了ContextProvider。这应该在所有关于C#和SQL的书中都有,我没有发现任何有用的,非常好的ContextProvider模式!当然,我用(Context-Context=contextProvided??new-Context()){但是我刚刚处理了contextProvided,我想…谢谢你的回答,这应该是work@fix我将其修改为ContextProvider。这应该出现在所有关于C#和SQL的书籍中,但没有发现任何有用的,非常好的ContextProvider模式!