比较列表中的多个元素

Compare multiple element in a list

我想从列表中提取符合以下不同标准的元素的数据:

我的列表包含:

1, name1, Time, quantity
2, name2, Time, quantity
3, name1, Time+1, quantity+1
4, name2, Time+1, quantity+1
....

我的目标:

if (MyList.Contains(name1 && name2))
{
    if (name1(quantity) == name2(quantity) && name1(Time) == name2(Time))
    {
        return quantity;
    }
}

我如何创建我的列表:

public class OCO1 : IEquatable<OCO1>
{
        public DateTime OrderCreatedTime {get; set;}
        public int ID {get; set;}
        public decimal Quantity {get; set;}
        public string Tag {get; set;}

        public override string ToString()
        {
            return "ID: " + ID + "   Name: " + Tag;
        }
        public override bool Equals(object obj)
        {
            if (obj == null) return false;
            OCO1 objAsOCO1 = obj as OCO1;
            if (objAsOCO1 == null) return false;
            else return Equals(objAsOCO1);
        }
        public override int GetHashCode()
        {
            return ID;
        }
        public bool Equals(OCO1 other)
        {
            if (other == null) return false;
            return (this.ID.Equals(other.ID));
        }
    // Should also override == and != operators.
}

public partial class Base
{
List<OCO1> CreatedTimeOrder = new List<OCO1>();

if (order.Tag.Equals("name1"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name1"});
}

if (order.Tag.Equals("name2"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name2"});
}

我不知道该怎么做。任何帮助表示赞赏!

“编辑 post jskfjhsfsjfsgfghsfshsfghjsfgsdsjffsgfgsgfyjhdfusygfyusgfuygfgsdvfvsdufvusvfuvsufvyusdfgyugfdyugfusgfuysfgusfgusgfuysgfgsugfusgfugf=ggy1dguf”的更多细节

根据作者的评论:

I want to get the quantity if the Time is the same for name1 and name2. I don't see how to explain it otherwise.

想象一下 class,为简化此答案而缩写。

public class Data
{
  public string Name { get; set; }
  public int Time { get; set; }
}

还有这个合集

List<Data> list = new List<Data>() { 
  new Data() { Name = "Name1", Time = 1 },
  new Data() { Name = "Name2", Time = 2 },
  new Data() { Name = "Name3", Time = 3 },
  new Data() { Name = "Name4", Time = 4 },
 };

你可以用 LINQ 做到这一点

string searchArray = new string[] { "Name1", "Name2" };
// Filtering only elements with Name equals name1 or name2
var filtered = list.Where(d => searchArray.Contains(d.Name)); 
if(filtered.GroupBy(d => d.Time).Count() == 1) // If there is only one group of Time
 return filtered.Sum(d => d.Time); // it will return 3 (1 + 2)
else
  // do another thing

如果我理解这个问题,您想找到所有具有相同 QuantityTime 值并且同时包含 "name1" 和 [=14] 的记录=],对于其中的每一个,您都希望 select Quantity 属性.

如果那是正确的,我们可以使用一点 System.Linq 来根据它们的 OrderCreatedTimeQuantity 属性对项目进行分组,过滤到仅具有至少一个项目的组每个想要的名字,然后 select Quantity 属性 来自组:

List<decimal> relevantQuantities = CreatedTimeOrder
    .GroupBy(item => new {item.OrderCreatedTime, item.Quantity})
    .Where(group => group.Any(item => item.Tag == "name1") &&
                    group.Any(item => item.Tag == "name2"))
    .Select(g => g.Key.Quantity)
    .ToList();

如果正确,请准确说明您希望返回的内容。