C# 基于linq集的c运算

C# 基于linq集的c运算,c#,asp.net,asp.net-mvc,linq,C#,Asp.net,Asp.net Mvc,Linq,我有一个IQueryable列表,它有5个字段。其中4个来自DB。 第5个字段必须使用一个join语句从代码中指定,该语句包含两个其他表,这些表不是该表引用的外键 查询如下所示 配置文件类包含以下字段 Id, Name, Username, Email, Product 产品字段不在DB中。必须使用以下查询在C代码中填充它 var resultSet = (from a in Profiles join _b_ in billingPeriodIncl

我有一个IQueryable列表,它有5个字段。其中4个来自DB。 第5个字段必须使用一个join语句从代码中指定,该语句包含两个其他表,这些表不是该表引用的外键

查询如下所示

配置文件类包含以下字段

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;
试试这个:-

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对象,而不是匿名类型。

这是不可能的。您这样做是可以的。虽然这是可行的,但是Profiles类可能会以列的形式增长。如果添加了一个新列,它可能会在这里丢失。@Raghav-如果Profiles类将增长,它也将在查询中可用,对吗?因为我们只加入Profiles类型。所以你说的不正确,你是对的,拉胡尔。但是Profiles类在各个领域都被广泛使用。添加新列时,应在此处指定该列的值。如果在这里漏掉它,它将导致默认列为null。这个查询很完美,我只是在选择部分寻找类似select*from的东西。好吧,但我认为使用左连接是不可能的,如果cz只选择对象a,它将导致运行时错误。