LINQで処理されているとわかりやすいコードがありますが、LINQコードの外観はわかりません。このコードをLINQに変換します
私はGoodsItemsのコレクションを持っています。このアイテムのそれぞれには、コメントのコレクションがあります。これらのコメントのいくつかは、フィルタリングして1つの文字列になります。ここで
はコードです:
//-- get all comments that is of type "GoodsDescription"
ICollection<FreeText> comments = new List<FreeText>();
foreach (DSV.Services.Shared.CDM.Shared.V2.GoodsItem goodsItem in shipmentInstructionMessage.ShipmentInstruction.ShipmentDetails.GoodsItems)
{
ICollection<DSV.Services.Shared.CDM.Shared.V2.FreeText> freeTexts = goodsItem.Comments.Where(c => c.Type.ToLower() == FREETEXT_TYPE_GOODSDESCRIPTION.ToLower()).ToList();
foreach (DSV.Services.Shared.CDM.Shared.V2.FreeText freeText in freeTexts)
comments.Add(FreeText.CreateFreeTextFromCDMFreeText(freeText));
}
//-- Turn this collection of comments into a single string line
StringBuilder sb = new StringBuilder();
foreach (FreeText comment in comments)
sb.Append(comment.ToString());
contents = sb.ToString();
まず、foreachのは、すべてのgoodsitemsスルーループし、各商品アイテムのために、私はコメントの種類が規定値にEqualeあるすべてのコメントを取得します。
このコメントのforeachを取得すると、新しいObjectが作成され、CommentsCollectionに追加されます。
最後に、このcommentsColletionをループして、すべてのデータを1つの文字列として作成することです。
LINQでこれを行うには、よりスマートな方法が必要です。あなたがこれを行うことができますように見えます
おかげで...
もっとよく見えます!あなたもlambasを使用しているバージョンを持っていますか? –
@Magnus技術的に、私たちはすでにこのファイルにラムダを持っています。これをメソッド構文(これはコンパイラがとにかくやっていることです)に入れたいと思ったら、このようなものになります。 –
最初のfrom _ _ _は... .GoodsItems.SelectMany(goodsItem => goodsItem.Comments.Where(...))になり、次に.Select(c => CreateFreeText(c).ToString())になります。正式なアドバイスは、クエリの構文を使用することです、私は彼らがここにいると思います!とにかく助けてくれることを願います。 –