C# 从C中的对象检索数据#
我有一个对象(大学),其中包含列表项(校园、课程、学生等) 因为我无法编写查询,例如C# 从C中的对象检索数据#,c#,linq,C#,Linq,我有一个对象(大学),其中包含列表项(校园、课程、学生等) 因为我无法编写查询,例如universions.Any() 我无法编写for循环,因为对象(如universions.Count)没有扩展名Count 我可以访问每个列表项大学、学生或大学、课程等 有任何指导或建议吗?因此正确的方法是创建一个界面,以反映包含ErrorMessage属性的对象的公共性: interface IErrorMessage { string ErrorMessage { get; set; } } 然
universions.Any()
我无法编写for循环,因为对象(如universions.Count)没有扩展名Count
我可以访问每个列表项大学、学生或大学、课程等
有任何指导或建议吗?因此正确的方法是创建一个界面,以反映包含ErrorMessage属性的对象的公共性:
interface IErrorMessage {
string ErrorMessage { get; set; }
}
然后在每个对象上实现接口:
public class Campus : IErrorMessage {
[DataMember]
public Guid Id { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
}
然后,您可以添加一个private helper方法和一个public方法,以将ErrorMessage
s返回到Universities
类:
private List<string> GetErrorMessagesFromList<T>(List<T> aList) where T : IErrorMessage {
return aList.Where(x => !String.IsNullOrEmpty(x.ErrorMessage)).Select(x => x.ErrorMessage).ToList();
}
public List<string> GetErrorMessages() {
return GetErrorMessagesFromList(CampusList)
.Concat(GetErrorMessagesFromList(CourseList))
.Concat(GetErrorMessagesFromList(StudentList))
.ToList();
}
public List<string> GetErrorMessagesByReflection() {
bool IsList(Type aType) => aType.IsGenericType && aType.GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>));
var errorMessages = new List<string>();
var props = this.GetType().GetProperties()
.Where(p => IsList(p.PropertyType));
foreach (var prop in props) {
var aList = prop.GetValue(this) as IEnumerable;
foreach (var anItem in aList) {
var possibleErrorMessage = anItem.GetType().GetProperty("ErrorMessage").GetValue(anItem) as string;
if (!String.IsNullOrEmpty(possibleErrorMessage))
errorMessages.Add(possibleErrorMessage);
}
}
return errorMessages;
}
因此,正确的方法是创建一个接口来反映包含ErrorMessage
属性的对象的公共性:
interface IErrorMessage {
string ErrorMessage { get; set; }
}
然后在每个对象上实现接口:
public class Campus : IErrorMessage {
[DataMember]
public Guid Id { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
}
然后,您可以添加一个private helper方法和一个public方法,以将ErrorMessage
s返回到Universities
类:
private List<string> GetErrorMessagesFromList<T>(List<T> aList) where T : IErrorMessage {
return aList.Where(x => !String.IsNullOrEmpty(x.ErrorMessage)).Select(x => x.ErrorMessage).ToList();
}
public List<string> GetErrorMessages() {
return GetErrorMessagesFromList(CampusList)
.Concat(GetErrorMessagesFromList(CourseList))
.Concat(GetErrorMessagesFromList(StudentList))
.ToList();
}
public List<string> GetErrorMessagesByReflection() {
bool IsList(Type aType) => aType.IsGenericType && aType.GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>));
var errorMessages = new List<string>();
var props = this.GetType().GetProperties()
.Where(p => IsList(p.PropertyType));
foreach (var prop in props) {
var aList = prop.GetValue(this) as IEnumerable;
foreach (var anItem in aList) {
var possibleErrorMessage = anItem.GetType().GetProperty("ErrorMessage").GetValue(anItem) as string;
if (!String.IsNullOrEmpty(possibleErrorMessage))
errorMessages.Add(possibleErrorMessage);
}
}
return errorMessages;
}
您回答了自己的问题,使用Students and Courses属性。@Crowcoder然而,我只提供了对象列表项的子集。如果对象中有30个列表项,该怎么办。我应该为每个问题写30个查询吗?例如Univerisites.Courses.Any(x=>x.Error)
。。我相信可能有更好/更有效的处理方式。你是指30张清单还是一张清单中的30项?请编辑您的问题,使其更准确地传达您正在尝试做的事情。因此,您需要类似于大学的东西。SelectMany(u=>u.CourseList)。SelectMany(c=>c.Errors)
?如果这是一项作业,我猜您应该实现一个接口,因为它迫切需要它。您回答了自己的问题,使用Students和Courses属性。@Crowcoder但是,我只提供了对象列表项的子集。如果对象中有30个列表项,该怎么办。我应该为每个问题写30个查询吗?例如Univerisites.Courses.Any(x=>x.Error)
。。我相信可能有更好/更有效的处理方式。你是指30张清单还是一张清单中的30项?请编辑您的问题,以便它能更准确地传达您的意图。因此,您需要类似于大学的东西。SelectMany(u=>u.CourseList)。SelectMany(c=>c.Errors)
?如果这是一项作业,我猜您应该实现一个接口,因为它迫切需要它。