0

私はこの種の構造を持っています:

public class Record
{
    public int Id { get; set; }
    public List <Field> Fields;
}

public class Field
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
}

これは、フィールドを持つレコードを表すカスタム クラスです。

今、私はたくさんのレコードを持っており、List<Record> Recordsフィールド値 (からField.Value) でレコードをソートできるようにしたいと考えています。

Field クラスには Id プロパティが含まれてList<int> SortByFieldIdsいるため、並べ替えに使用する必要があるフィールドを示すリスト ( ) があります。

私の問題は、それを処理する方法がわからないことです。List<Record> RecordsToSortandを受け取りList<int> SortByFieldIds、レコードのソート済みリストを返すメソッドを作成する方法がわかりません。お願い助けて。

4

3 に答える 3

0

あなたがIDを持っていると述べたのでList<int>、それらのIDに基づいてフィルタリングを行い、最後にIDに基づいてフィールドをソートしたいList<Field>Records思い ますIDField

たとえば、2 つのレコードがある場合

record 1 has 3 fields with IDs (1,2,3)
record 2 had 4 fields with IDs (4,3,6,2)

ここで、ID 6、2、3 のフィールドを含むレコードを返すList<int>値が必要であり、レコードごとにフィールドをソートする必要がある場合。6,2,3

したがって、この例では、結果は次のようになります

record 1 has 3 fields with IDs (2,3)
record 2 had 4 fields with IDS (2,3,6)

これがあなたが求めているものである場合、ここに実際の例のコードがあります

        List<Field> fields1 = new List<Field>();
        fields1.Add(new Field() { Id = 1, Name = "ONE", Value = "one" });
        fields1.Add(new Field() { Id = 2, Name = "TWO", Value = "two" });
        fields1.Add(new Field() { Id = 3, Name = "THREE", Value = "three" });

        List<Field> fields2 = new List<Field>();
        fields2.Add(new Field() { Id = 4, Name = "FOUR", Value = "four" });            
        fields2.Add(new Field() { Id = 3, Name = "THREE", Value = "three" });
        fields2.Add(new Field() { Id = 6, Name = "SIX", Value = "six" });
        fields2.Add(new Field() { Id = 2, Name = "TWO", Value = "two" });

        records.Add(new Record() { Id = 1, Fields = fields1 });
        records.Add(new Record() { Id = 2, Fields = fields2 });

        //You did mention that you already have this 
        List<int> SortByFieldIds = new List<int>();
        SortByFieldIds.AddRange(new List<int> { 6, 2, 3 });


        //before foreach loop records will have 2 records (record1 with fields 1,2,3 and record2 with fields 4,3,6,2)

        foreach (Record r in records)
        {
            r.Fields = r.Fields.Where(f => SortByFieldIds.Contains(f.Id)).OrderBy(f => f.Id).ToList();
        }

        //after foreach loop records will have 2 records (record1 with fields 2,3 and record2 with fields 2,3,6)
于 2012-07-06T11:04:00.400 に答える
0

LINQ を使用してリストを並べ替えることができます。何かのようなもの:

List<Record> list = new List<Record>();
List<Record> SortByFieldIds = list.OrderBy(r => r.Fields.Select(a => a.Id)).ToList();

編集

最初に ID を検索してから、値に基づいて並べ替えたい場合は、次を試してください。

int yourFieldID = 0;//this will hold your Field.ID
List<Record> sortByFieldId = list.OrderBy(
                                          r => r.Fields.Where(
                                          a => a.Id == yourFieldID
                                          ).FirstOrDefault().Value).ToList();

編集終了

ID に基づいてレコード リストを並べ替えるには

List<Record> sortByRecordId = list.OrderBy(r => r.Id).ToList();

含めることを忘れないでください

using System.Linq;
于 2012-07-06T05:46:23.177 に答える
0

LINQを使用できますOrderBy

クラス レベルで SortByFieldIds を作成し、IComparerを OrderByに渡すことができます。

于 2012-07-06T05:47:10.480 に答える