2011-02-25 72 views
1

我有一个EF模型,我可以从中选择要在ASP.NET中呈现的数据的子集。当我呈现这个输出时,我循环返回的对象。我想知道什么时候呈现具有最高价值的对象(以不同的格式)。将属性赋值给EF模型,以便对象知道它是最大的

ObjectTable 
Category Item Value 
X   A 1.0 
X   B 14.0 
X   C 9.0 
Y   D 18.0 

我可以回到我想查看与项目:

var obj = from o in ObjectTable where Category=="X" select o; 

我想知道B具有最高的价值。

我对这种情况非常灵活我只是无法想出一个合理的解决方案。我是否应该修改LINQ语句来添加创建obj.IsMax变量的LET语句,以及如果o.Value == o.Max使其成为TRUE并将所有其他对象设置为FALSE,那么该如何?这条路线好像会很贵?

或者我可以用分部类扩展EF模型,并以某种方式计算模型值是否等于返回对象的最大值?

或者完全不同的东西?

回答

0
var obj = (ObjectTable.Where(o => o.Category == "Y")); 
var anonymousObjList = obj.Select(o => new {o, IsMax = (o.Value == obj.Max(x => x.Value))}); 

和循环直通anonymousObjList

foreach(var obj in anonymousObjList) 
{ 
    var actualObject = obj.o; 
    var isMax = obj.IsMax; 
} 
+0

感谢您的快速回复。对不起刚刚意识到我的例子中有一个错字,这使得它不太清楚。我将调整并解释 – ChrisT 2011-02-25 01:55:43

+0

您的示例中的IsMax正在比较表中所有值的最大值,而不仅仅是查询返回的类别中的值,这正是我需要的 – ChrisT 2011-02-25 01:58:49

+0

Oops错过了这一点。编辑! – 2011-02-25 02:02:51