【发布时间】:2014-01-30 13:24:58
【问题描述】:
我有一个类似于下面的 LINQ 查询:
var results=from p in inputTable.AsEnumerable()
where inputParameter.Contains(p.Field<String>(inputField))&&
p.Field<string>(CurrencyCode)==currencyCode
group p by new
{
p[CurrencyCode],
} into groupedTable
select new
{
Amount = groupedTable.Sum(r => r.Field<System.Decimal>(amountField))
};
if (results.Count() > 0)
{
retVal = results.ElementAt(0).Amount;
}
我的inputParameter 基本上是List<string>,其值类似于{October, November, December}。
inputField 是 November。
我的想法是,由于 where 条件有一个 Contains 方法,它只会按 November 过滤行,因为 inputField 是 November。
我基本上需要通过列表的所有元素,即October,November和December,然后得到这些月份过滤的记录。
我尝试使用LINQ 的where-in 的东西,但没有成功。
请专家帮忙解决这个问题。 任何帮助/指针都会非常有用。
编辑:
让我试着让这个问题变得非常简单。
我的List<string>inputParameter可以包含变量字符串,比如{October, November, December}或者{January, February, March, April}等等。
我需要我的查询传入所有这些值并相应地过滤记录。
我尝试的简化查询如下:
var results=from p in inputTable.AsEnumerable()
where p.Field<string>(FiscalMonth)==inputParameter[0] ||
p.Field<string>(FiscalMonth)==inputParameter[1] ||
p.Field<string>(FiscalMonth)==inputParameter[2]
select new
{
p.Amount
};
在上面的例子中,我基本上对列表inputParameter 的各个元素进行了硬编码,但我的列表有时会发生变化。即它可能包含 3 个项目、4 个项目,甚至 12 个项目。
如何塑造上述查询以避免个别硬编码?
问候
阿努拉格
【问题讨论】:
-
什么不起作用?您的代码似乎按预期处理 List
。 -
先生。 Marko,我需要在 where 子句中传递整个字符串,即我需要获取 Oct、Nov、Dec 的结果。目前,上面的查询只给了我 11 月的结果,它作为 inputField 参数传递。
-
如果您将
inputParamter设置为new List<string>() {"October", "November", "December"},您的代码应该可以正常工作。inputField是inputTable中列的名称,而不是筛选字段。 -
是的,表中的列的名称也很奇怪,我一直期待 ????_Month 或类似的名称。
-
Tony:inputField 基本上是作为参数传递给编写此 LINQ 查询的函数