使用一个具有不同参数的LINQ语句

时间:2010-03-13 19:44:15

标签: linq-to-sql

我有一个非常复杂的linq语句,我需要访问不同的方法。这些方法中的每一种都可能需要查看具有不同参数的结果数据。对于一种方法,它可能是项目代码,而另一种方法可能是语言。声明几乎是相同的,只是改变的地方部分。

我无法弄清楚如何在不重复整个linq语句的情况下使用不同的where语句,这对我来说还不够干。

例如(大大简化):

var r = from c in  customer
        where c.name == "some name"

// or it may be 

var r = from c in customer
        where c.customerId == 8

有没有办法在同一个声明中同时使用这两个,所以我可以根据我的工作使用其中一个?我尝试使用if语句来使用where语句或其他语句,但这并没有很好地完成。

3 个答案:

答案 0 :(得分:3)

你可以这样做:

var r = from c in customer
        select c;

if (CustomerName != null)
  r = r.Where(c => c.name == CustomerName);
if (CustomerID != null)
  r = r.Where(c => c.customerId == CustomerID);

如果只应用一个else if,你可以制作这些{{1}},在我的例子中,任何非null的标准都将应用于要过滤的查询。

答案 1 :(得分:1)

这样的事情怎么样?

var useIdForFiltering = false;

var r = from c in customer
    where (useIdForFiltering && c.customerId == 8) || (c.name == "some name")

答案 2 :(得分:0)

您可以将Func委托传递给您的函数(Where子句使用布尔返回类型的Func委托)。然后在Where子句中使用此委托。