使用RecordSet计数的MVC Linq查询

时间:2014-05-03 09:52:05

标签: asp.net sql linq asp.net-mvc-5

使用Linq时是否可以仅指定表中的某些字段,并且可能包含RecordSet计数?

这是我在HomeController.cs

中的现有查询
var contentModel = from m in db.Contents where (m.NavigationId == 1) && (m.Active == true) orderby m.Position select m;
return View(contentModel);

我想包括Id,Title,Image和Summary,将记录集中的最大记录数设置为12并返回一个额外的值,即实际的记录数/ 12并传递给View。

非常感谢任何帮助: - )

3 个答案:

答案 0 :(得分:0)

您可以使用

而不是select m
 select new { m.Name, m.Id, m.SomeOtherProperty }

或者,如果您想将该结果作为返回值传递给另一个方法

 select new ContentsViewModel()
 {
     Name = m.Name,
     Id = m.Id,
     SomeOtherProperty = m.SomeOtherProperty
 };

ContentViewModel是第二个POCO类,如下所示:

 public class ContentViewModel()
 {
      // Must have a public constructor with 0 parameters
      public ContentViewModel(){}

      public string Name{get;set;}
      public int Id{get;set;}
      public Something SomeOtherProperty{get;set;}
 }

由于limitations in Entity Framework described here.

,这不能是实体框架类

有关计数问题,请参阅:https://stackoverflow.com/a/7771298/736079

答案 1 :(得分:0)

你需要这样的东西:

   Var contentModel = db.Contents.Where(m=>m.NavigationId==1)
                   .Where(m=m.Active=true).Take(12).Orderby(m=>m.Position).Select(m=> new {m.Id, m.Summary, m.Title,m.Image});

但我不确定你用12的记录数来理解你的意思。因为你已经将记录数设置为12。

您的结果将是IEnumerable访问您需要迭代的字段。

关于您要传递的号码,您可以使用ViewBag对象: 在你的议员中:

   Int number = contentModel.ToList().Coun()/ 2;
   ViewBag.myNum=number;

在您的视图中,您将使用转换为int的ViewBag.myNum。 您也可以选择尝试。

希望它会有所帮助。

答案 2 :(得分:0)

var contentModel = from m in db.Contents where (m.NavigationId == 1) && (m.Active == true) orderby m.Position 
select m.Id, m.Title,m.Image,m.Summary;
var top = contentModel.Take(12);
int max = top.Count();
int Count = contentModel.Count();
var avr = Count/max;
return View(avr ); 

return View(top);