Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# using语句中的可选上下文参数_C#_Entity Framework_Using_Optional Parameters - Fatal编程技术网

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模式!