c#linq - 基于集合的操作

时间:2014-12-24 11:22:01

标签: c# asp.net asp.net-mvc linq

我有一个IQueryable列表,其中包含5个字段。其中4个来自DB。 必须使用join语句从代码中分配第5个字段(其他表格不是引用此表的外键)。

查询看起来像这样。

Profile对以下字段进行分类。

Id, Name, Username, Email, Product

产品字段不在DB中。必须使用以下查询在C#代码中填充它。

  var resultSet = (from a in Profiles
                   join _b_ in billingPeriodIncludes
                   on a.Id equals (int?) _b_._cbp.BundleId into b_
                   from _b in b_.DefaultIfEmpty()
                   where a.Product != null
                   select new
                   { 
                     a,
                     Product = (_b != null && _b._p != null) ? (_b._p) : a.Product
                   }

查询为我提供了个人资料和产品的组合。现在,我遍历每个配置文件并将每个产品分配到其配置文件。

有人可以帮我做基于直接设置的产品分配吗?

类似的东西,(不工作)

var q1 = (from a in Profiles
          join _b_ in billingPeriodIncludes
          on a.Id equals (int?) _b_._cbp.BundleId into b_
          from _b in b_.DefaultIfEmpty()
          select
          //Assign products to the set. Query the set in a separate query.
          a.Product = (_b != null && _b._p != null) ? (_b._p) : a.Product
          );
var q2 = from _q2 in q1 select _q2;

1 个答案:

答案 0 :(得分:3)

试试这个: -

var resultSet = (from a in Profiles
                 join _b_ in billingPeriodIncludes
                 on a.Id equals (int?) _b_._cbp.BundleId into b_
                 from _b in b_.DefaultIfEmpty()
                 where a.Product != null
                 select new Profiles
                 { 
                    Id = a.Id,
                    Name = a.Name,
                    Username = a.Username,
                    Email = a.Email,
                    Product = (_b != null && _b._p != null) ? (_b._p) : a.Product
                 };

您可以直接绑定Profiles对象,而不是anonymous类型。