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