我有一个非常复杂的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语句或其他语句,但这并没有很好地完成。
答案 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子句中使用此委托。