在LINQ查询中获取值

时间:2012-05-25 03:23:40

标签: c# linq

我有一个查询,通过它我填充网格。这是查询,

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 ....)。你可以帮我解决这个问题吗?

5 个答案:

答案 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 };