Linq通过join联合查询的结果在ToList后,返回给了视图,试图怎么遍历以展示.
var data = from item in ldEntities.Goods
join oditem in ldEntities.OrderDetail on item.ID equals oditem.GoodsId
where item.ID > 4000
select new
{
ID = item.ID,
DisplayName = item.DisplayName,
OrderId = oditem.OrderId
};
return View(data.ToList());
根本问题是你用了匿名类型。匿名类型及其所有成员都是程序集内才可以访问的,你把匿名对象传进了视图页中,匿名类型并不在视图页被编译后的dll,也就是说视图页里根本不能访问在其它dll中的匿名对象,所以报错。你不要用匿名类型,写个public的类来就好了
嗯呢! 这几天的折腾明白了一些。感谢大家的回答!
@Naylor: 今天突然想到,还是应该将具体的源代码贴上来才比较好,万一有人看到了这个问题,有源码可能更好理解了。
/// <summary>
/// 将linq查询到的结果转化为强类型的List泛型集合
/// </summary>
/// <returns></returns>
public ActionResult GetStrongTypingFromLinq()
{
List<StockListModel> data = (List<StockListModel>)(from gitem in lde.Goods
join bitem in lde.Brand on gitem.BrandId equals bitem.Id
join titem in lde.GoodsType on gitem.TypeId equals titem.ID
join gsitem in lde.GoodsStore on gitem.ID equals gsitem.GoodsId
join sitem in lde.Store on gsitem.StoreId equals sitem.ID
select new StockListModel()
{
GoodsId = gitem.ID,
GoodsBrand = bitem.Name,
GoodsType = titem.TypeName,
GoodsName = gitem.DisplayName,
GoodsUnit = gitem.Unit,
GoodsPackage = gitem.Package,
GoodsPrice = gitem.Price,
GoodsImg = gitem.HomeImage,
GoodsStore = sitem.Name,
StoreBranchId = sitem.BranchId,
GoodsStock = gsitem.Num
}
).Take(100).OrderByDescending(c => c.GoodsId).ToList();
foreach (var item in data)
{
var theitem = item;
}
return View(data);
}
利用强类型视图 遍历这个集合就ok
强类型视图那还需要添加一个实体类,这样总感觉有点麻烦,而且写出来的代码看着也怪怪的,这么强大的EF和这么强大的Linq,应该提供了相关的解决方案的把?
@Naylor: 你从底层查出来的数据大部分都会做DTO,当然对于一些简单的单表查询就没必要了,这有什么麻烦的,EF的强大和LINQ的强大和你渲染数据没有什么联系,你还不得需要通过类还进行投影或其他转换。
IEnumerable<dynamic>
大哥 ,详细解释下呗
你这种想法我尝试过,到目前为止还没有成功过。所以,耐心用封装一个类吧。
额 好吧,我也是蛮奇怪的,在百度谷歌搜索了半天都没有靠谱点的解决方案,好吧我乖乖的封装实体类吧。