Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Linq中选择GroupBy方法后的新模型列表?_C#_Linq_Entity Framework_Model_Group By - Fatal编程技术网

C# 如何在Linq中选择GroupBy方法后的新模型列表?

C# 如何在Linq中选择GroupBy方法后的新模型列表?,c#,linq,entity-framework,model,group-by,C#,Linq,Entity Framework,Model,Group By,我希望将分组行选择到新模型列表中。这是我的代码: List<Model_Bulk> q = (from a in db.Advertises join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID where a.AdvertiseActive == true &

我希望将分组行选择到新模型列表中。这是我的代码:

List<Model_Bulk> q = (from a in db.Advertises 
                      join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID
                      where a.AdvertiseActive == true 
                            && a.AdvertiseExpireDate.HasValue 
                            && a.AdvertiseExpireDate.Value > DateTime.Now 
                            && (a.AdvertiseObjectType == 1 
                                || a.AdvertiseObjectType == 2)
                      select c)
     .GroupBy(a => a.CompanyID).Select(a => new Model_Bulk
     {
         CompanyEmail = a.CompanyContactInfo.Email,
         CompanyID = a.CompanyID,
         CompanyName = a.CompanyName,
         Mobile = a.CompanyContactInfo.Cell,
         UserEmail = a.User1.Email,
         categories = a.ComapnyCategories
     }).ToList();
List q=(从数据库中的a开始)。广告
将c加入a.a.a.a.c.a.a.a.c.a.c.a.a.c.a.c.a.c.a.c.c.c.a.c.c.c.c.c.a.c.c.c.c.c.D
其中a.AdvertiseActive==true
&&a.AdvertiseExpireDate.HasValue
&&a.AdvertiseExpireDate.Value>DateTime.Now
&&(a.AdvertiseObjectType==1)
||a.AdvertiseObjectType==2)
选择c)
.GroupBy(a=>a.CompanyID)。选择(a=>newmodel\u Bulk
{
CompanyEmail=a.CompanyContactInfo.Email,
CompanyID=a.CompanyID,
CompanyName=a.CompanyName,
Mobile=a.CompanyContactInfo.Cell,
UserEmail=a.User1.Email,
类别=a.comAponyCategories
}).ToList();
group by之后,我无法使用Select,自然会出现以下语法错误:

System.Linq.IGrouping“”不包含“CompanyContactInfo”的定义,并且没有接受类型为的第一个参数的扩展方法“CompanyContactInfo” 可以找到System.Linq.IGrouping(是否缺少using指令或程序集引用?)

如果我尝试使用SelectMany()方法。但结果将重复,并且groupby方法无法正常工作:

List<Model_Bulk> q = (from a in db.Advertises
                      join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID
                      where a.AdvertiseActive == true 
                            && a.AdvertiseExpireDate.HasValue 
                            && a.AdvertiseExpireDate.Value > DateTime.Now 
                            && (a.AdvertiseObjectType == 1 
                                || a.AdvertiseObjectType == 2)
                      select c)
     .GroupBy(a => a.CompanyID).SelectMany(a => a).Select(a => new Model_Bulk
     {
         CompanyEmail = a.CompanyContactInfo.Email,
         CompanyID = a.CompanyID,
         CompanyName = a.CompanyName,
         Mobile = a.CompanyContactInfo.Cell,
         UserEmail = a.User1.Email,
         categories = a.ComapnyCategories
     }).ToList();
List q=(从数据库中的a开始)。广告
将c加入a.a.a.a.c.a.a.a.c.a.c.a.a.c.a.c.a.c.a.c.c.c.a.c.c.c.c.c.a.c.c.c.c.c.D
其中a.AdvertiseActive==true
&&a.AdvertiseExpireDate.HasValue
&&a.AdvertiseExpireDate.Value>DateTime.Now
&&(a.AdvertiseObjectType==1)
||a.AdvertiseObjectType==2)
选择c)
.GroupBy(a=>a.CompanyID)。选择many(a=>a)。选择(a=>newmodel\u Bulk
{
CompanyEmail=a.CompanyContactInfo.Email,
CompanyID=a.CompanyID,
CompanyName=a.CompanyName,
Mobile=a.CompanyContactInfo.Cell,
UserEmail=a.User1.Email,
类别=a.comAponyCategories
}).ToList();

而不是
。选择多个(a=>a)
您可以使用
。选择(g=>g.First())
。这将为您提供每组的第一项

(from a in db.Advertises
                          join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID
                          where a.AdvertiseActive == true && a.AdvertiseExpireDate.HasValue && a.AdvertiseExpireDate.Value > DateTime.Now && (a.AdvertiseObjectType == 1 || a.AdvertiseObjectType == 2)
                          select c)
             .GroupBy(a => a.CompanyID)
             .Select(g => g.First())
             .Select(a => new Model_Bulk
             {
                 CompanyEmail = a.CompanyContactInfo.Email,
                 CompanyID = a.CompanyID,
                 CompanyName = a.CompanyName,
                 Mobile = a.CompanyContactInfo.Cell,
                 UserEmail = a.User1.Email,
                 categories = a.ComapnyCategories
             }).ToList();

请注意,这可能不受支持,如果是这种情况,请在
之前添加一个
aseneumerable
调用。选择(g=>g.First())
而不是
。选择多个(a=>a)
可以使用
。选择(g=>g.First())
。这将为您提供每组的第一项

(from a in db.Advertises
                          join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID
                          where a.AdvertiseActive == true && a.AdvertiseExpireDate.HasValue && a.AdvertiseExpireDate.Value > DateTime.Now && (a.AdvertiseObjectType == 1 || a.AdvertiseObjectType == 2)
                          select c)
             .GroupBy(a => a.CompanyID)
             .Select(g => g.First())
             .Select(a => new Model_Bulk
             {
                 CompanyEmail = a.CompanyContactInfo.Email,
                 CompanyID = a.CompanyID,
                 CompanyName = a.CompanyName,
                 Mobile = a.CompanyContactInfo.Cell,
                 UserEmail = a.User1.Email,
                 categories = a.ComapnyCategories
             }).ToList();

请注意,这可能不受支持,如果是这种情况,请在
之前添加一个
aseneumerable
调用。选择(g=>g.First())
您应该了解,在执行
GroupBy()之后
在您的LinQ表达式中,您与组一起工作,因此在您的示例中,最好这样编写:

List<Model_Bulk> q = 
    (from a in db.Advertises join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID                          
    where a.AdvertiseActive == true 
    && a.AdvertiseExpireDate.HasValue 
    && a.AdvertiseExpireDate.Value > DateTime.Now 
    && (a.AdvertiseObjectType == 1 || a.AdvertiseObjectType == 2)
    select c)
                 .GroupBy(a => a.CompanyID)
                 .Select(a => new Model_Bulk
                 {
                     CompanyEmail = a.First().CompanyContactInfo.Email,
                     CompanyID = a.Key, //Note this line, it's can be happened becouse of GroupBy()
                     CompanyName = a.First().CompanyName,
                     Mobile = a.First().CompanyContactInfo.Cell,
                     UserEmail = a.First().User1.Email,
                     categories = a.First().ComapnyCategories
                 }).ToList();
列表q=
(从数据库中的a.广告加入数据库中的c.公司a.广告公司ID等于c.公司ID
其中a.AdvertiseActive==true
&&a.AdvertiseExpireDate.HasValue
&&a.AdvertiseExpireDate.Value>DateTime.Now
&&(a.AdvertiseObjectType==1 | | a.AdvertiseObjectType==2)
选择c)
.GroupBy(a=>a.CompanyID)
.选择(a=>新型号
{
CompanyEmail=a.First().CompanyContactInfo.Email,
CompanyID=a.Key,//注意这一行,这可能是由于GroupBy()引起的
CompanyName=a.First().CompanyName,
Mobile=a.First().CompanyContactInfo.Cell,
UserEmail=a.First().User1.Email,
categories=a.First().ComapnyCategories
}).ToList();

您应该了解,在您的LinQ表达式中执行
GroupBy()
后,您将与组一起工作,因此在您的示例中,最好这样编写:

List<Model_Bulk> q = 
    (from a in db.Advertises join c in db.Companies on a.AdvertiseCompanyID equals c.CompanyID                          
    where a.AdvertiseActive == true 
    && a.AdvertiseExpireDate.HasValue 
    && a.AdvertiseExpireDate.Value > DateTime.Now 
    && (a.AdvertiseObjectType == 1 || a.AdvertiseObjectType == 2)
    select c)
                 .GroupBy(a => a.CompanyID)
                 .Select(a => new Model_Bulk
                 {
                     CompanyEmail = a.First().CompanyContactInfo.Email,
                     CompanyID = a.Key, //Note this line, it's can be happened becouse of GroupBy()
                     CompanyName = a.First().CompanyName,
                     Mobile = a.First().CompanyContactInfo.Cell,
                     UserEmail = a.First().User1.Email,
                     categories = a.First().ComapnyCategories
                 }).ToList();
列表q=
(从数据库中的a.广告加入数据库中的c.公司a.广告公司ID等于c.公司ID
其中a.AdvertiseActive==true
&&a.AdvertiseExpireDate.HasValue
&&a.AdvertiseExpireDate.Value>DateTime.Now
&&(a.AdvertiseObjectType==1 | | a.AdvertiseObjectType==2)
选择c)
.GroupBy(a=>a.CompanyID)
.选择(a=>新型号
{
CompanyEmail=a.First().CompanyContactInfo.Email,
CompanyID=a.Key,//注意这一行,这可能是由于GroupBy()引起的
CompanyName=a.First().CompanyName,
Mobile=a.First().CompanyContactInfo.Cell,
UserEmail=a.First().User1.Email,
categories=a.First().ComapnyCategories
}).ToList();

相反,您可以尝试类似的方法,而不是混合查询表达式和方法。。。(根据需要在where/select中使用FirstOrDefault())


相反,您可以尝试类似的方法,而不是混合查询表达式和方法。。。(根据需要在where/select中使用FirstOrDefault())


请尝试a.First().CompanyContactInfo.Email。。。对于其a组…与其他属性相同…使用.Select(a=>a.FirstOrDefault())。选择。。。在解决方案中分组后。感谢您的提示。a.First().CompanyContactInfo.Email。。。对于其a组…与其他属性相同…使用.Select(a=>a.FirstOrDefault())。选择。。。在解决方案中分组后。感谢您的提示创建并正常工作。但我必须使用FirstorDefault而不是First()。请编辑您有用的帖子。感谢SelmanCreat并正常工作。但我必须使用FirstorDefault而不是First()。请编辑您有用的帖子。感谢Selmangood和works f