如何将linq结果集作为自定义类型返回 公共类LearnerInfo { 公共字符串Id{get;set;} 公共字符串名称{get;set;} 公共LearnerInfo(字符串id、字符串名称) { 这个.Id=Id; this.Name=Name; } } 公共课堂学习课程 { 公共字符串Id{get;set;} 公共字符串过期计数{get;set;} 公共字符串SoondUserCount{get;set;} 公共字符串Currentmonthcount{get;set;} 公共字符串Currentmonthplus1count{get;set;} 公共字符串Currentmonthplus2count{get;set;} 公共字符串Currentmonthplus3count{get;set;} 公共字符串Currentmonthplus4count{get;set;} 公共字符串Currentmonthplus5count{get;set;} 公共字符串小计{get;set;} 公共学习课程(字符串id、字符串exp、字符串soonDue、字符串current、字符串plus1、字符串plus2、, 字符串plus3、字符串plus4、字符串plus5) { 这个.Id=Id; this.ExpiredCount=exp; this.soonducecount=soonDue; 此.Currentmonthcount=当前; this.Currentmonthplus1count=plus1; this.Currentmonthplus2count=plus2; this.Currentmonthplus3count=plus3; this.Currentmonthplus4count=plus4; this.Currentmonthplus5count=plus5; } 公共学习课程() { } } 公共类信息列表:IEnumerable { 私有列表_infoList=新列表(); 公共信息列表() { _infoList=新列表(); } 公共作废新增(合并信息一) { _增加(i); } 公共IEnumerator GetEnumerator() { 返回_infoList.GetEnumerator(); } //IEnumbers成员 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { 抛出新的NotImplementedException(); } } 公共类组合信息 { 公共字符串Id{get;set;} 公共字符串过期计数{get;set;} 公共字符串SoondUserCount{get;set;} 公共字符串Currentmonthcount{get;set;} 公共字符串Currentmonthplus1count{get;set;} 公共字符串Currentmonthplus2count{get;set;} 公共字符串Currentmonthplus3count{get;set;} 公共字符串Currentmonthplus4count{get;set;} 公共字符串Currentmonthplus5count{get;set;} 公共字符串名称{get;set;} } 静态void Main(字符串[]参数) { LearnerCourse lc1=新的LearnerCourse(“777”、“1”、“1”、“0”、“1”、“0”、“0”); LearnerCourse lc2=新的LearnerCourse(“589”、“1”、“0”、“0”、“0”、“0”、“0”); LearnerInfo li1=新的LearnerInfo(“777”,“moe”); LearnerInfo li2=新的LearnerInfo(“589”,“拉里”); LearnerCourse[]lCourses=新的LearnerCourse[2]; lCourses[0]=lc1; lCourses[1]=lc2; LearnerInfo[]linfos=新的LearnerInfo[2]; linfos[0]=li1; linfos[1]=li2; //测试对象数组的linq连接 var myJoin=(来自lCourses中的c) 在c.Id上加入linfos。Id等于i.Id 选择新的{ c、 过期计数, c、 Soonduecount, c、 当前月数, c、 CurrentMonthPlus1计数, c、 CurrentMonthPlus2计数, c、 CurrentMonthPlus3计数, c、 CurrentMonthPlus4计数, c、 CurrentMonthPlus5计数, c、 小计, i、 身份证, i、 名字 }); foreach(组合成o形和l形) { //循环并可以添加到CombinedInfo类型的列表中 } }
我没有经历foreach循环,而是在尝试从linq查询中获取结果集以仅返回列表时遇到问题 建议?两件事: a) 项目到自定义类,而不是匿名类型。在您的情况下,您已经定义了如何将linq结果集作为自定义类型返回 公共类LearnerInfo { 公共字符串Id{get;set;} 公共字符串名称{get;set;} 公共LearnerInfo(字符串id、字符串名称) { 这个.Id=Id; this.Name=Name; } } 公共课堂学习课程 { 公共字符串Id{get;set;} 公共字符串过期计数{get;set;} 公共字符串SoondUserCount{get;set;} 公共字符串Currentmonthcount{get;set;} 公共字符串Currentmonthplus1count{get;set;} 公共字符串Currentmonthplus2count{get;set;} 公共字符串Currentmonthplus3count{get;set;} 公共字符串Currentmonthplus4count{get;set;} 公共字符串Currentmonthplus5count{get;set;} 公共字符串小计{get;set;} 公共学习课程(字符串id、字符串exp、字符串soonDue、字符串current、字符串plus1、字符串plus2、, 字符串plus3、字符串plus4、字符串plus5) { 这个.Id=Id; this.ExpiredCount=exp; this.soonducecount=soonDue; 此.Currentmonthcount=当前; this.Currentmonthplus1count=plus1; this.Currentmonthplus2count=plus2; this.Currentmonthplus3count=plus3; this.Currentmonthplus4count=plus4; this.Currentmonthplus5count=plus5; } 公共学习课程() { } } 公共类信息列表:IEnumerable { 私有列表_infoList=新列表(); 公共信息列表() { _infoList=新列表(); } 公共作废新增(合并信息一) { _增加(i); } 公共IEnumerator GetEnumerator() { 返回_infoList.GetEnumerator(); } //IEnumbers成员 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { 抛出新的NotImplementedException(); } } 公共类组合信息 { 公共字符串Id{get;set;} 公共字符串过期计数{get;set;} 公共字符串SoondUserCount{get;set;} 公共字符串Currentmonthcount{get;set;} 公共字符串Currentmonthplus1count{get;set;} 公共字符串Currentmonthplus2count{get;set;} 公共字符串Currentmonthplus3count{get;set;} 公共字符串Currentmonthplus4count{get;set;} 公共字符串Currentmonthplus5count{get;set;} 公共字符串名称{get;set;} } 静态void Main(字符串[]参数) { LearnerCourse lc1=新的LearnerCourse(“777”、“1”、“1”、“0”、“1”、“0”、“0”); LearnerCourse lc2=新的LearnerCourse(“589”、“1”、“0”、“0”、“0”、“0”、“0”); LearnerInfo li1=新的LearnerInfo(“777”,“moe”); LearnerInfo li2=新的LearnerInfo(“589”,“拉里”); LearnerCourse[]lCourses=新的LearnerCourse[2]; lCourses[0]=lc1; lCourses[1]=lc2; LearnerInfo[]linfos=新的LearnerInfo[2]; linfos[0]=li1; linfos[1]=li2; //测试对象数组的linq连接 var myJoin=(来自lCourses中的c) 在c.Id上加入linfos。Id等于i.Id 选择新的{ c、 过期计数, c、 Soonduecount, c、 当前月数, c、 CurrentMonthPlus1计数, c、 CurrentMonthPlus2计数, c、 CurrentMonthPlus3计数, c、 CurrentMonthPlus4计数, c、 CurrentMonthPlus5计数, c、 小计, i、 身份证, i、 名字 }); foreach(组合成o形和l形) { //循环并可以添加到CombinedInfo类型的列表中 } },linq,c#-3.0,custom-type,Linq,C# 3.0,Custom Type,我没有经历foreach循环,而是在尝试从linq查询中获取结果集以仅返回列表时遇到问题 建议?两件事: a) 项目到自定义类,而不是匿名类型。在您的情况下,您已经定义了组合信息——请使用它 b) 使用ToList()强制执行并将结果转换为列表 两件事: a) 项目到自定义类,而不是匿名类型。在您的情况下,您已经定义了组合信息——请使用它 b) 使用ToList()强制执行并将结果转换为列表 很好,我尝试了各种各样的方法,当我尝试这个解决方案时,我忽略了一件事,即PropertyName=fro
组合信息
——请使用它
b) 使用ToList()
强制执行并将结果转换为列表
两件事:
a) 项目到自定义类,而不是匿名类型。在您的情况下,您已经定义了组合信息
——请使用它
b) 使用ToList()
强制执行并将结果转换为列表
很好,我尝试了各种各样的方法,当我尝试这个解决方案时,我忽略了一件事,即PropertyName=from和select new。谢谢你的帮助!很好,我尝试了各种各样的方法,当我尝试这个解决方案时,我忽略了一件事,即PropertyName=from和select new。谢谢你的帮助!
public class LearnerInfo
{
public string Id { get; set; }
public string Name { get; set; }
public LearnerInfo(string id, string name)
{
this.Id = id;
this.Name = name;
}
}
public class LearnerCourse
{
public string Id { get; set; }
public string ExpiredCount { get; set; }
public string Soonduecount { get; set; }
public string Currentmonthcount { get; set; }
public string Currentmonthplus1count { get; set; }
public string Currentmonthplus2count { get; set; }
public string Currentmonthplus3count { get; set; }
public string Currentmonthplus4count { get; set; }
public string Currentmonthplus5count { get; set; }
public string Subtotal { get; set; }
public LearnerCourse(string id, string exp, string soonDue, string current, string plus1, string plus2,
string plus3, string plus4, string plus5)
{
this.Id = id;
this.ExpiredCount = exp;
this.Soonduecount = soonDue;
this.Currentmonthcount = current;
this.Currentmonthplus1count = plus1;
this.Currentmonthplus2count = plus2;
this.Currentmonthplus3count = plus3;
this.Currentmonthplus4count = plus4;
this.Currentmonthplus5count = plus5;
}
public LearnerCourse()
{ }
}
public class InfoList : IEnumerable<CombinedInfo>
{
private List<CombinedInfo> _infoList = new List<CombinedInfo>();
public InfoList()
{
_infoList = new List<CombinedInfo>();
}
public void Add(CombinedInfo i)
{
_infoList.Add(i);
}
public IEnumerator<CombinedInfo> GetEnumerator()
{
return _infoList.GetEnumerator();
}
//IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
public class CombinedInfo
{
public string Id { get; set; }
public string ExpiredCount { get; set; }
public string Soonduecount { get; set; }
public string Currentmonthcount { get; set; }
public string Currentmonthplus1count { get; set; }
public string Currentmonthplus2count { get; set; }
public string Currentmonthplus3count { get; set; }
public string Currentmonthplus4count { get; set; }
public string Currentmonthplus5count { get; set; }
public string Name { get; set; }
}
static void Main(string[] args)
{
LearnerCourse lc1 = new LearnerCourse("777", "1", "1", "0", "1", "0", "0", "0", "0");
LearnerCourse lc2 = new LearnerCourse("589", "1", "0", "0", "0", "0", "0", "0", "0");
LearnerInfo li1 = new LearnerInfo("777", "moe");
LearnerInfo li2 = new LearnerInfo("589", "larry");
LearnerCourse[] lCourses = new LearnerCourse[2];
lCourses[0] = lc1;
lCourses[1] = lc2;
LearnerInfo[] linfos = new LearnerInfo[2];
linfos[0] = li1;
linfos[1] = li2;
//test linq join for object array
var myJoin = (from c in lCourses
join i in linfos on c.Id equals i.Id
select new {
c.ExpiredCount,
c.Soonduecount,
c.Currentmonthcount,
c.Currentmonthplus1count,
c.Currentmonthplus2count,
c.Currentmonthplus3count,
c.Currentmonthplus4count,
c.Currentmonthplus5count,
c.Subtotal,
i.Id,
i.Name
});
foreach (CombinedInfo o in l)
{
//loop through and can add to list of type CombinedInfo
}
}
var list = (from c in lCourses
join i in linfos on c.Id equals i.Id
select new CombinedInfo() {
ExpiredCount = c.ExpiredCount,
Soonduecount = c.Soonduecount,
Currentmonthcount = c.Currentmonthcount,
Currentmonthplus1count = c.Currentmonthplus1count,
Currentmonthplus2count = c.Currentmonthplus2count,
Currentmonthplus3count = c.Currentmonthplus3count,
Currentmonthplus4count = c.Currentmonthplus4count,
Currentmonthplus5count = c.Currentmonthplus5count,
Subtotal = c.Subtotal,
Id = i.Id,
Name = i.Name
}).ToList();