我的数据库有3个表。我想做的就是按表3中的最新日期订购
表格看起来有点像
表1
ID CompanyId
1 1
2 1
3 2
表2
Id CompanyColumn
1 Blah
2 Bleh
表3
Id CompanyId Date
1 1 5/1/2015
2 1 8/1/2015
3 1 15/1/2015
4 2 6/1/2015
我正在使用EF而我的对象基于Table1
所以,我可以做到
var tab1 = this.Entities.Table1;//I now have a reference to table 1
var result = from t in tab1
group t by d.Table2.Table3.Select(a => a.Date)
into g
select g.FirstOrDefault();
错误讯息是
调用“GroupBy”方法的键选择器类型在底层商店提供程序中无法比较。
我试过
var result = from t in tab1
group t by d.CompanyId
into g
select g.FirstOrDefault();
result = result.OrderByDescending(a => a.Table2.Table3.Select(b => b.DateTime));
错误讯息是
DbSortClause表达式必须具有可比较的类型。\ r \ nParameter name:key
我完全失去了
答案 0 :(得分:2)
当你这样做时
d.Table2.Table3.Select(a => a.Date)
或者
a.Table2.Table3.Select(b => b.DateTime)
您将获得由第一个案例中的IQueryable<Date>
或第二个案例中的IQueryable<DateTime>
表示的完整日期序列。您收到错误,因为IQueryable<T>
不是IComparable<IQueryable<T>>
。
基本上,问题是每个表达式可能产生多个Date
或DateTime
。如果使用聚合函数替换Select
,例如Min
或Max
,则代码将编译:
var result = from t in tab1
group t by d.Table2.Table3.Min(a => a.Date)
into g
select g.FirstOrDefault();
或
result = result.OrderByDescending(a => a.Table2.Table3.Min(b => b.DateTime));