Перейдите через список, используя LinQ, чтобы получить желаемый результат

Вопрос:
 public class ItemDetails
{
public List<string> XAxis { get; set; }

public List<string> YAxis { get; set; }

public List<string> Value { get; set; }
}

public class Activity
{
public string ActivityName { get; set; }

public string ActivityValue { get; set; }
}

public class ActivityQuarterModel
{
public Activity Activity { get; set; }

public Quarter Quarter { get; set; }
}

public class Quarter : IEquatable<Quarter>
{
public int Year { get; set; }
public int QuarterIndex { get; set; }


public Quarter FromDate(DateTime date)
{
Quarter quarter = new Quarter()
{
Year = date.Year,
QuarterIndex = 1 + (date.Month - 1) / 3
};
return quarter;
}

public string GetQuarter(DateTime date)
{
string quarter = "Q" + (1 + (date.Month - 1) / 3) + " " + date.Year;
return quarter;
}

public override bool Equals(object otherItem)
{
Quarter other = otherItem as Quarter;
if (other == null) return false;
return this.Equals(other);
}

public bool Equals(Quarter otherItem)
{
if (otherItem == null) return false;
return Year == otherItem.Year && QuarterIndex == otherItem.QuarterIndex;
}

public override int GetHashCode()
{
unchecked
{
int hash = 23;
hash = (hash * 31) + Year;
hash = (hash * 31) + QuarterIndex;
return hash;
}
}
}

public class ItemComparer : IEqualityComparer<Quarter>
{
public bool Equals(Quarter lhs, Quarter rhs)
{
if (lhs == null || rhs == null) return false;
return lhs.Year == rhs.Year && lhs.QuarterIndex == rhs.QuarterIndex;
}

public int GetHashCode(Quarter item)
{
if (item == null) return 0;
unchecked
{
int hash = 23;
hash = (hash * 31) + item.Year;
hash = (hash * 31) + item.QuarterIndex;
return hash;
}
}
}

class Program
{
static void Main(string[] args)
{
ItemDetails itemDetails = new ItemDetails()
{
XAxis = new List<string>() { "Q1 2013", "Q2 2013"},
YAxis = new List<string>() { "Activity1", "Activity2"},
Value = new List<string>() { "ActivityType3", "ActivityType5" }
};

List<ActivityQuarterModel> sourceList = new List<ActivityQuarterModel>()
{
new ActivityQuarterModel() { Activity = new Activity(){ ActivityName = "Activity1", ActivityValue = "ActivityType3"}, Quarter = new Quarter() { QuarterIndex = 2, Year = 2013}},
new ActivityQuarterModel() { Activity = new Activity(){ ActivityName = "Activity1", ActivityValue = "ActivityType5"}, Quarter = new Quarter() { QuarterIndex = 1, Year = 2013}},
new ActivityQuarterModel() { Activity = new Activity(){ ActivityName = "Activity1", ActivityValue = "ActivityType3"}, Quarter = new Quarter() { QuarterIndex = 3, Year = 2013}},
new ActivityQuarterModel() { Activity = new Activity(){ ActivityName = "Activity2", ActivityValue = "ActivityType3"}, Quarter = new Quarter() { QuarterIndex = 1, Year = 2013}},
new ActivityQuarterModel() { Activity = new Activity(){ ActivityName = "Activity1", ActivityValue = "ActivityType5"}, Quarter = new Quarter() { QuarterIndex = 1, Year = 2013}},
};

}
}

У меня есть данные в ItemDetails, которые я использую для фильтрации. Нужен фильтр List sourceList

Как получить список ActivityValues с кварталом “Q1 2013” и названием деятельности “Activity1”? ActivityValues должны быть представлены ActivityValues. Здесь они “ActivityType3”, “ActivityType5”,

Не могли бы вы помочь мне?

Ответ №1

Список itemDetails, по-видимому, не имеет отношения к значениям, и на основе вашего примера результаты: “ActivityType5” и “ActivityType5”,

var activityValues = (from aqm in sourceList
where (aqm.Activity.ActivityName == "Activity1" &&
(aqm.Quarter.QuarterIndex == 1 && aqm.Quarter.Year == 2013)) // Made the assumption that "Q1 2013" is QuarterIndex = 1 and Year = 2013
select aqm.Activity.ActivityValue).ToList();

Ответ №2

Я не уверен, понял ли я это правильно, но это то, что вы ищете?

var results = sourceList.Where(a => a.Quarter.QuarterIndex.Equals(1)
&& a.Quarter.Year.Equals(2013)
&& a.Activity.ActivityName.Equals("Activity1")
&& (a.Activity.ActivityValue.Equals("ActivityType3") || a.Activity.ActivityValue.Equals("ActivityType5")));

Оцените статью
TechArks.Ru
Добавить комментарий