簡體   English   中英

比較列表中的多個元素

[英]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"});
}

我不知道該怎么做。 任何幫助不勝感激!

“編輯帖子 jskfjhsfsjfsgfghsfshsfghjsfgsdsjffsgfgsgfyjhdfusygfyusgfuygfgsdvfvsdufvusvfuvsufvyusdfgyugfdyugfusgfuysfgusfgusgfuysgfgsugfusgfugfgsfgufgusfugydsfg 的更多詳細信息”

根據作者的評論:

如果 name1 和 name2 的時間相同,我想獲取數量。 我不明白如何解釋它。

想象一下這個 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""name2"的記錄,並且對於每個記錄,您希望 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();

如果這正確,請准確說明您期望返回的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM