IQueryable& ref关键字(添加where子句)

时间:2015-10-29 11:02:40

标签: c# parameters iqueryable ref

IQueryable<SomeType> cases;

如果我想在case查询中添加where子句,我有两个选项,但我不知道哪个更好。

可能是:

cases = SomeFunction(cases);
...
private IQueryable<SomeType> SomeFunction(IQueryable<SomeType> cases)
{
  return cases.Where(whatever);
}

SomeFunction(ref cases)
...
private void SomeFunction(ref IQueryable<SomeType> cases)
{
cases = cases.Where(whatever);
}

2 个答案:

答案 0 :(得分:1)

我会使用没有引用的版本,因为它可以让调用者保持原始查询的灵活性,而无需在调用函数之前获取其引用的副本。

您的来电者可能想要编写如下代码:

var cases = CreateQueryToFindCases();
var casesFilterdBySomthing = FilterBySomething(cases);

而不是

var cases = CreateQueryToFindCases();
var casesFilterdBySomthing = cases;
FilterBySomething(ref casesFilterdBySomthing );

他们甚至可能希望嵌套这样的函数调用,这些调用不能通过ref传递的参数轻松完成:

var casesFilterdBySomthing = FilterBySomething(CreateQueryToFindCases());

答案 1 :(得分:1)

我会说第一个更好,因为它允许“流畅”使用和链接,例如:

IQueryable<SomeType> cases = ...;
(SomeCondition ? SomeFunction(cases) : cases).Where(...).OrderBy(...) etc.