public partial class Product
{
    public Product()
    {
        this.ProductPrimaryPrices = new HashSet<ProductPrimaryPrice>();
        this.ProductSecondaryPrices = new HashSet<ProductSecondaryPrice>();            
    }

    public int ProductId { get; set; }       
    public string Code { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public byte[] Image { get; set; }        

    public virtual ICollection<ProductPrimaryPrice> ProductPrimaryPrices { get; set; }        
    public virtual ICollection<ProductSecondaryPrice> ProductSecondaryPrices { get; set; }
}

从上面的代码中,我只想选择Product实体的ProductIdCodeNameDescription以及ProductPrimaryPricesProductSecondaryPrice所有相关属性,因为从数据库中加载Image byte[]数组需要花费大量时间。 我只需要Product实体中的选定列,以及ProductPrimaryPriceProductSecondaryPrices所有列。

我已经尝试过使用类似如下的匿名类型,但是在如何将匿名类型再次转换回Product遇到了麻烦。

var tempProduct = (from p in ctx.Products.Include("ProductPrimaryPrices").Include("ProductSecondaryPrices")
                   select new 
                          {
                              ProductId = p.ProductId,                                   
                              Code = p.Code,
                              Name = p.Name,
                              Description = p.Description,                                    
                              ProductPrimaryPrices = p.ProductPrimaryPrices,
                              ProductSecondaryPrices = p.ProductSecondaryPrices                                    
                          }
                  ).ToList();

谁能帮我吗?

#1楼 票数:0

最后,经过一番头脑风暴,我得到了答案

现在,我可以通过使用反射将匿名类型转换为Product类型。 我已经实现了一种将匿名类型转换为“产品”类型的方法,然后一个接一个地循环我通过调用新实现的方法将匿名类型转换为Product类型。

以下是一个实现

public List<Product> GetProduct()
{
    List<Product> products = new List<Product>();
    using (var ctx = new PosEntities())
    {
        var tempProducts = 
            (from p in ctx.Products.Include("ProductPrimaryPrices").Include("ProductSecondaryPrices").Include("ProductsModifiers")
            where (p.MenuGroupId == menuGroupId && p.Active) && (p.ProductPrimaryPrices.Any(x => x.OutletId == outletId && x.Active))
            select new 
            {
                ProductId = p.ProductId,
                Code = p.Code,
                Name = p.Name,
                Description = p.Description,                
                ProductPrimaryPrices = p.ProductPrimaryPrices,
                ProductSecondaryPrices = p.ProductSecondaryPrices,
                ProductsModifiers = p.ProductsModifiers
            }).ToList();                    

        foreach (object anonymous in tempProducts)
        {
            Product product = (Product)Utility.ToType<Product>(anonymous, new Product());
            products.Add(product);
        }
        return products;
    }
}

以下是将匿名类型转换为Product类型的方法

public static class Utility
    {
        public static object ToType<T>(this object obj, T type)
        {
            //create instance of T type object:            
            object tmp = Activator.CreateInstance(Type.GetType(type.ToString()));

            //loop through the properties of the object you want to covert:          
            foreach (PropertyInfo pi in obj.GetType().GetProperties())
            {
                try
                {
                    //get the value of property and try to assign it to the property of T type object:
                    tmp.GetType().GetProperty(pi.Name).SetValue(tmp, pi.GetValue(obj, null), null);
                }
                catch (Exception ex)
                {
                    // Logging.Log.Error(ex);
                }
            }
            //return the T type object:         
            return tmp;
        }       
    }

  ask by Niraj Trivedi translate from so

未解决问题?本站智能推荐:

3回复

如何从linq中的子表中选择列

如何在linq查询中包含二级表列? 我不希望.Net执行延迟加载,因为还有其他表链接到这些表。 表是 测验和问题有一对多的关系。 选项问题也有一对多的关系。 如何在linq查询中包含选项列?
1回复

Linq两个表的总和列

我的RowMultiplevaluw表是 我的使用量表是 我的查询是 我想要的结果是 请帮助我我的模型设计和查询结果。谢谢。
3回复

如何仅选择一列以在Linq中返回对象

我试图仅选择CourseId属性,但它给我一个错误 错误: EntityFramework.SqlServer.dll中发生类型为'System.NotSupportedException'的异常,但未在用户代码中处理 附加信息:不能在LINQ to Entities查询中构
1回复

在LINQ查询中,如何使用包含的表列使用.Include()进行排序?

我有这个表结构: 我有这个LINQ查询: 有可能做这样的事情: 更新:使用Entity Framework 4.0 更新2:我放弃了。 对于另一种方法,请参阅此类似问题 我最后在没有.Include()的情况下重写了我的查询。
2回复

如何按表列过滤LINQ查询并获取计数

我正在尝试根据他们的状况,按大学分类,列出学生名单。 所以我有三张桌子,学生和大学。 每个学生记录都有一个状态,可以是“预期”,“已接受”或“ WebApp”。 我需要做的是根据选择的状态获取学生列表,然后显示学院的名称以及上该学院并将其状态设置为传入状态的学生人数。我认为这需要是一个
3回复

如何根据子表列过滤LINQ查询?

我正在使用下面的代码中提到的实体框架连接2个表,并希望基于子表列过滤数据,但是当我运行代码时,它会将表2作为空数组发送。 在调试代码时,我发现以下错误。 错误=无法计算表达式。 不支持该操作。 未知错误:0x80070057。
1回复

通过Linq或SQL中的触发器将列添加到表

问题是,我有两个表X和Y。将记录添加到表X时,列应并行添加到表Y中。 http://prntscr.com/3owqfe <-提供清晰的想法。 我尝试使用触发器,但是似乎触发器不允许CREATE TABLE或ALTER TABLE。 无论如何,当我使用Linq时,我试图通过L
2回复

如何建立查询以使用LiNQ选择主要和最后一个明细(max(Id))

我如何像对以下问题的答案中的内容那样编写对实体查询的LiNQ: 从主数据库选择SQL-明细表 我想利用模型中存在的现有导航属性(将数据库导入到Entity Framework EDMX)。