我正在尝试使用LINQ to SQL来检索特定日期范围的收入数据。目前该表的设置如下:
Comp Eps Year Quarter
IBM .5 2012 2
IBM .65 2012 3
IBM .60 2012 4
IBM .5 2011 2
IBM .7 2013 1
IBM .8 2013 2
除了Eps之外,所有字段都具有字符串或字符的数据类型。 Eps的数据类型为double。 这是我的代码:
var myData = myTable
.Where(t => t.Comp.Equals("IBM")
&&
Convert.Int32(string.Format("{0}{1}", t.Year, t.Quarter)) <= 20131);
我在尝试时遇到以下错误:
Method 'System.String Format(System.String, System.Object, System.Object)' has no supported translation to SQL
如何选择所有具有年份和年份的Eps?使用lambda表达式小于“20132”的四分之一?
答案 0 :(得分:2)
最佳解决方案是更改数据库架构,以使Year
和Quarter
成为整数。
如果这不可能 - 正如您所说 - 您可以使用.AsEnumerable()
扩展方法在内存中运行一半查询:
var myData =
myTable.Where(t => t.Comp.Equals("IBM"))
.AsEnumerable()
.Where(Convert.Int32(string.Format("{0}{1}", t.Year, t.Quarter)) <= 20131);
根据您在数据库中具有相同Comp
的行数,您将失去一些性能。
答案 1 :(得分:0)
你可以试试这个:
var myData = myTable
.Where(t => t.Comp.Equals("IBM")
&& (Convert.ToInt32(t.Year) < 2013
|| (Convert.ToInt32(t.Year) == 2013
&& Convert.ToInt32(t.Quarter) <= 2)));
或者这个:
var myData = myTable
.Where(t => t.Comp.Equals("IBM")
&& String.Compare(t.Year + "" + t.Quarter, "20131") <= 0 );
答案 2 :(得分:0)
var myData = myTable
.Where(t => t.Comp.Equals("IBM")
&& (( Convert.ToInt32(t.Year) ==2013 && t.Quarter<2) || Convert.ToInt32(t.Year)<2013 ));