我有一个查询,通过它我填充网格。这是查询,
var query = from r in DbContext.Groups
select
new
{
r.Id, r.Name, r.Description, r.UpdatedBy, r.UpdatedDate,
GroupType =DbContext.ProductTypes.Where(p=>p.Id ==
r.ProductTypes_Id).Select(t=>t.Name)
};
因此,问题是从另一个表中提取的grouptype的值不显示该值。它显示的类型(System.Common ....)。你可以帮我解决这个问题吗?
答案 0 :(得分:1)
也许试试
GroupType =DbContext.ProductTypes.Where(p=>p.Id == r.ProductTypes_Id).Select(t=>new { name = t.Name})
或
GroupType =DbContext.ProductTypes.Where(p=>p.Id == r.ProductTypes_Id).FirstOrDefault().Name
答案 1 :(得分:0)
您选择的是序列而不是项目。如果您知道只返回一个值,请使用.Single
运算符:
GroupType =DbContext.ProductTypes.Where(p=>p.Id ==
r.ProductTypes_Id).Select(t=>t.Name).Single()
注意最后追加.Single()
。
(它显示类型名称的原因是因为它只是显示.ToString()
运算符实现类的默认.Select
方法。)
答案 2 :(得分:0)
你期待
DbContext.ProductTypes.Where(p=>p.Id == r.ProductTypes_Id).Select(t=>t.Name)
返回单个值?现在看起来它正在分配一个linq匿名类型列表,而不是单个值。
如果您想要单个值,请使用First或FirstOrDefault,如果您可以保证(或不是gaurantee)返回的值。
答案 3 :(得分:0)
的结果
.Select(t=>t.Name)
是
IEnumerable<ProductType>
所以你有一个集合而不是一个值。
例如,将您的查询更改为:
var query = from r in DbContext.Groups
select
new
{
r.Id, r.Name, r.Description, r.UpdatedBy, r.UpdatedDate,
GroupType =DbContext.ProductTypes.Single(p=>p.Id ==
r.ProductTypes_Id).Name
};
但是,此代码包含危险的内容,我建议添加其他检查(例如,如果找不到产品类型,此代码将引发异常等),并且理想情况下,将此代码移至存储库或类似的东西。
答案 4 :(得分:0)
为什么不使用简单的连接操作
from r in DbContext.Groups join p in DbContext.ProductTypes on r.ProductTypes_Id equals p.Id
select new { Id = r.Id, Name = r.Name, Description = r.Description, UpdatedBy = r.UpdatedBy, UpdatedDate = r.UpdatedDate, GroupType = p.Name };