Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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# LINQ实时构建Silverlight c_C#_Silverlight_Linq - Fatal编程技术网

C# LINQ实时构建Silverlight c

C# LINQ实时构建Silverlight c,c#,silverlight,linq,C#,Silverlight,Linq,我有这样一种方法: 参数可以为null public string getAll(string d1, string d2, string d3){ Do the linq } 如果d1不为null,我想做一个linq查询,如果d2不为null,我想做另一个linq查询,如果d1和d2不为null,我想做一个linq查询,以及所有可能的参数转换 我不想做: if(d1 != null) //linq opt1 if(d2 != null //linq opt2 if(d1 != nu

我有这样一种方法:

参数可以为null

public string getAll(string d1, string d2, string d3){
     Do the linq
}
如果d1不为null,我想做一个linq查询,如果d2不为null,我想做另一个linq查询,如果d1和d2不为null,我想做一个linq查询,以及所有可能的参数转换

我不想做:

if(d1 != null)
//linq opt1
if(d2 != null
//linq opt2
if(d1 != null && d2 != null)
//linq opt3
请:

public string getAll(string d1, string d2, string d3){
     if (d1 == null)
      //Do LINQ
     if (d2 == null)
      //Do LINQ
     if (d3 == null)
      //Do LINQ

      if (d1 == null && d2 == null && d3 != null)
       //Do LINQ
      if (d1 == null && d2 != null && d3 == null)
       //Do LINQ
      if (d1 != null && d2 == null && d3 != null)
       //Do LINQ
}

这不是复制和粘贴,但你应该明白这一点。需要进行一些检查,以便两组都不会执行。

通常,这些类型问题中的查询具有一些共性。否则,为什么要使用一种方法?。也许您正在寻找条件筛选

public string getAll(string d1, string d2, string d3)
{
   using(CustomDataContext dc = new CustomDataContext())
   {
     IQueryable<Customer> query = dc.Customers;
     if (d1 != null)
     {
       query = query.Where(c => c.Name.StartsWith(d1));
     }
     if (d2 != null)
     {
       query = query.Where(c => c.Orders.Any(o => o.OrderNumber == d2));
     }
     if (d3 != null)
     {
       query = query.Where(c => c.FavoriteColor == d3);
     }
     query =
        from c in query
        order c by c.Name
        select c;

     List<Customer> results = query.Take(5).ToList();
     string answer = SomeMethod(results);
     return answer;
   }
} 

为了在一行中完成,您可以使用嵌套的三元语句

var result = d1==null?d2==null?/*Linq when both are null*/:/*Linq when d1 is null but d2 isn't*/:/*linq when neither d1 and d2 are null*/;

本例没有3个参数,但请继续嵌套:

除了代码有点凌乱之外,您还有什么问题?是的,在一行代码中无法做到这一点?如果您添加第四个参数,上帝会帮助您的。像这样的东西是您要找的吗?这是我想要避免的;想想看,你还打算怎么做呢。您需要对每个参数进行检查。您可以使用一些开关使其更加优雅,但您仍然需要编写一些代码。:3!可能性?如果我有8个参数,那么我必须写8!可能性?????您使用一种方法来处理许多不同的情况,就像我之前所说的,有更优雅的方式来编写它,但我觉得它仍然会是一堆代码。