使用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。
非常感谢任何帮助: - )
答案 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);
等