C# 在视图中使用LINQ

C# 在视图中使用LINQ,c#,linq,asp.net-mvc-4,C#,Linq,Asp.net Mvc 4,视图中不允许使用逻辑,但我想知道在视图中使用LINQ是否被接受 例如: 如果我有一个能呈现一支球队球员的观点。在同一视图的侧栏中,我有一个小部件,它呈现TopScorer或其他内容。我可以使用相同的球员集合和LINQ来获得进球最多的前5名球员吗 我不是在寻找解决办法。我知道使用LINQ是可能的,但它是否遵循编码准则(最佳实践) 更新: 我的申请乍一看很简单。所以我想我可以使用我的域模型(实体)作为视图的模型。我现在完全分离了我的DomainModels,并使用一个构建器来创建我的视图模型。现在,

视图中不允许使用逻辑,但我想知道在视图中使用LINQ是否被接受

例如: 如果我有一个能呈现一支球队球员的观点。在同一视图的侧栏中,我有一个小部件,它呈现TopScorer或其他内容。我可以使用相同的球员集合和LINQ来获得进球最多的前5名球员吗

我不是在寻找解决办法。我知道使用LINQ是可能的,但它是否遵循编码准则(最佳实践)

更新:
我的申请乍一看很简单。所以我想我可以使用我的域模型(实体)作为视图的模型。我现在完全分离了我的DomainModels,并使用一个构建器来创建我的视图模型。现在,所有linq逻辑都从视图移动到构建器,更加简洁。

在视图中使用逻辑没有什么错,只要它是表示逻辑,而不是业务逻辑。因此,您可以在视图中使用linq


在您的情况下,计算得分最高的玩家,我认为应该被视为业务逻辑,而不是表示逻辑,应该在控制器中进行,而不是在视图中进行。

在视图中使用逻辑没有错,只要它是表示逻辑,而不是业务逻辑。因此,您可以在视图中使用linq


在您的案例中,计算得分最高的参与者,我认为应该被视为业务逻辑,而不是表示逻辑,应该在控制器中完成,而不是在视图中完成。

根据经验法则,假设您允许您的webapp作为Web服务运行,返回XML(或JSON或其他内容),而不是呈现HTML。当应用程序充当Web服务时仍然需要的任何逻辑都是业务逻辑的一部分,应该在控制器中。任何在webservice模式下变成冗余的逻辑都是表示逻辑,应该在视图中


Web服务是否需要获取前5名玩家?对因此,这是业务逻辑,不应该出现在视图中。

根据经验,假设您允许您的Web应用程序作为Web服务运行,返回XML(或JSON或其他内容),而不是呈现HTML。当应用程序充当Web服务时仍然需要的任何逻辑都是业务逻辑的一部分,应该在控制器中。任何在webservice模式下变成冗余的逻辑都是表示逻辑,应该在视图中


Web服务是否需要获取前5名玩家?对因此,这是业务逻辑,不应该出现在视图中。

也许这对您有所帮助:我会在控制器中使用此逻辑,而绝对不会出现在视图中,但解决方案是创建一个单独的TopCorersModel并将其填入控制器中。然后将其添加到一个更大的模型中,该模型也包含玩家作为模型?我会在我的ViewModel中包含此逻辑,而绝对不会在我的控制器中。从未想过使用我的视图模型。也许这对您有帮助:我会在控制器中包含此逻辑,而绝对不会在视图中。但解决方案是创建一个单独的TopCorersModel并填充这是在控制器中。然后将其添加到一个更大的模型中,该模型也包含玩家作为模型?我会在我的ViewModel中包含此逻辑,而绝对不会在我的控制器中。从未想过使用我的视图模型。好的,很好的解释。另一个问题:我可以在视图模型中定义LINQ吗?因为一支球队已经有了自己的球员。所以,如果我在团队中定义一个函数,该函数只迭代当前玩家集合并返回前5名玩家?我不太熟悉ASP.NET MCV方法,因此您需要获得额外的意见。在RoR中,您将在模型中创建一个作用域(=情感查询的方法),以便使用该模型的任何人都可以使用它。控制器为视图准备查询,以便视图可以将范围应用于查询。在MVC.NET中不能这样做,因为视图只能通过视图模型访问模型。您也不应该将该方法放在视图模型中,因为它只是一个不应该执行任何逻辑的容器。也许把这个方法放到模型中,然后把它写到视图模型中的一个字段中?我的应用程序乍一看很简单。所以我想我可以使用我的域模型(实体)作为视图的模型。我现在完全分离了我的DomainModels,并使用一个构建器来创建我的视图模型。所有linq逻辑现在都从视图移动到构建器,更加清晰。感谢您的回复/意见。“LINQ逻辑”不是一件事。LINQ只是一种处理数据的新方法(嗯……不再是那么新了……)。将逻辑放在何处的问题不在于该逻辑如何处理数据,而在于该逻辑如何处理该数据。我知道LINQ逻辑不是一件事,但它使您能够以更干净的方式迭代集合。在那里使用LINQ时,我的视图看起来仍然很干净,就像一个简单的计数,但我必须改变我的思维方式,因为使用构建器和视图模型显然更干净/可测试。好的,很好的解释。另一个问题:我可以在视图模型中定义LINQ吗?因为一支球队已经有了自己的球员。所以,如果我在团队中定义一个函数,该函数只迭代当前玩家集合并返回前5名玩家?我不太熟悉ASP.NET MCV方法,因此您需要获得额外的意见。在RoR中,您将在模型中创建一个作用域(=情感查询的方法),以便使用该模型的任何人都可以使用它。控制器为视图准备查询,以便视图可以将范围应用于查询。在MVC.NET中不能这样做,因为视图只能通过视图模型访问模型。您也不应该将该方法放在视图模型中,因为它只是一个不应该执行任何逻辑的容器。也许把这个方法放到模型中,然后把它写到视图模型中的一个字段中?我的应用程序乍一看很简单。所以我想我可以使用我的域模型(实体)作为视图的模型。我现在完全分离了我的DomainModels,并使用一个构建器来创建我的视图模型。所有linq逻辑现在都从视图移动到构建器,更加清晰。谢谢你