29

データグループから複数のファイルを作成するためのより効率的な方法が必要です。タイプを使用していList<MyObject>て、オブジェクトにいくつかのパブリックプロパティがあり、データをグループ化する必要があります。

Linqのことを聞いたことがありますが、それは私が使用できるもののように聞こえます。しかし、私はそれについてどうやって行くのかわかりません。

STATEごとにテキストファイルを作成する必要があるため、すべてのMyObjects(人)を州ごとにグループ化し、foreachそれらを調べてTEXTファイルを作成します。

void Main()
{

    List<MyObject>   lst = new List<MyObject>();
    lst.Add(new MyObject{ name = "bill", state = "nsw", url = "microsoft.com"});
    lst.Add(new MyObject{ name = "ted",  state = "vic", url = "apple.com"});
    lst.Add(new MyObject{ name = "jesse", state = "nsw", url = "google.com"});
    lst.Add(new MyObject{ name = "james", state = "qld", url = "toshiba.com"});

    string builder = "";
    foreach (MyObject item in myObjects)  {

        builder += item.name + "\r\n";
        builder += item.url + "\r\n" + "\r\n\r\n";

    }

and out to the `StreamWriter` will be the filenames by state. 

上記のデータの合計で3つのファイルが必要です。

-nsw.txt
-vic.txt
-qld.txt
4

5 に答える 5

56

もしかして、こういうこと?

    var groups = lst.GroupBy(x => x.state);

    foreach (var group in groups) 
    {
        using (var f = new StreamWriter(group.Key + ".txt"))
        {
            foreach (var item in group)
            {
                f.WriteLine(item.name);
                f.WriteLine(item.url);
            }
        }
    }
于 2012-10-13T14:17:29.513 に答える
15

あなたは間違いなく。ここでLINQを使用できます。

lst.GroupBy(r=> r.state).ToList().ForEach(r=> {
        //state= r.Key
        //

        foreach (var v in r)
        {

        }
    });

linqのこと。その中で何かをする方法を知りたい場合。「SQLでこれを行うにはどうすればよいか」と考えてください。キーワードはほとんど同じです。

于 2012-10-13T14:11:44.030 に答える
3

実際には、LINQ を使用してコンテンツ全体を作成できます。

var entryFormat = "{1}{0}{2}{0}{0}{0}";
var groupsToPrint = lst
   .GroupBy(p => p.state)
   .Select(g => new 
    {
       State = g.Key,
       // produce file content on-the-fly from group entries
       Content = string.Join("", g.Select(v => string.Format(entryFormat, 
           Environment.NewLine, v.name, v.url)))
    });

var fileNameFormat = "{0}.txt";
foreach (var entry in groupsToPrint)
{
    var fileName = string.Format(fileNameFormat, entry.State);
    File.WriteAllText(fileName, entry.Content);
}
于 2012-10-13T14:15:45.667 に答える
0

何かのようなもの...

string builderNsw = "";
foreach (MyObject item in lst.Where(o=>o.state == 'nsw'))  {

    builderNsw += item.name + "\r\n";
    builderNsw += item.url + "\r\n" + "\r\n\r\n";

}

...しかし、おそらくこれを達成する方法はたくさんあります。

于 2012-10-13T14:14:45.543 に答える
0

上記と同じ - グループごとにグループを反復し、グループ名も取得できます

    int itemCounter = 1;
    IEnumerable<DataRow> sequence = Datatables.AsEnumerable();

    var GroupedData = from d in sequence group d by d["panelName"];      // GroupedData is now of type IEnumerable<IGrouping<int, Document>>

    foreach (var GroupList in GroupedData) // GroupList = "document group", of type IGrouping<int, Document>
    {          
      bool chk = false;
      foreach (var Item in GroupList)
      {

        if (chk == false) // means when header is not inserted
        {
          var groupName = "Panel Name : " + Item["panelName"].ToString();

          chk = true;
        }
        var count = itemCounter.ToString();
        var itemRef = Item["reference"].ToString();

        itemCounter++;
      }
    }
于 2016-01-14T08:55:00.793 に答える