2017-04-19 14 views
1

C# - VS 2017 - LINQ to Entities データを取り出す必要があり、それぞれのアイテムをステップ実行し、特定の条件を満たす場合はフラグを変更します。linq結果セットの値を変更する

私はそれが匿名型のためであることを知っています - 私はそれについていくつかの記事を読んだが、私はそれを回避する方法を知らない。

私は良いから真に変える必要があります。私は、データを取得するのはここ がある:私は、各項目をステップどこ

var RMA_stops_all = (from rma in rDb.DistributionStopInformations 
        join line in rDb.DistributionLineItems on rma.UniqueIdNo equals line.UniqueIdNo 
        where line.RmaNumber != null 
         && (line.DatetimeCreated > Convert.ToDateTime(dateToCheck_rma) 
          && line.DatetimeCreated < Convert.ToDateTime(dateToCheck_rma).AddDays(7)) 
         && rma.CustomerNo == TNGCustNo 
        select new 
        { 
         line.DatetimeCreated, 
         rma.UniqueIdNo, 
         line.RmaNumber, 
         line.RmaOriginalUniqueId, 
         line.ItemSequenceNo, 
         line.ItemNumber, 
         good = false 
        }).ToArray(); 

、ここでは、次のとおりです。

foreach (var testRma in RMA_stops_all) 
{ 
    if (testRma.RmaNumber.Contains("/078")) 
    { 
     testRma.good = true; 
    }  
} 

エラーは言う:

「プロパティまたはインデクサ「匿名型:DateTime?DatetimeCreated、 decimal UniqueIdNo、文字列RmaNumber、小数点?RmaOriginalUniqueId、 小数点以下ItemSequenceNo、文字列ItemNumber、bool good> .good 'できません。割り当てられた こと - それは

「読み取り専用です、私は私のLINQや私foreachを変更する必要がありますか?

答えて

3

から匿名のオブジェクトを変更することですこれを行う最も簡単な方法:

select new 
{ 
    line.DatetimeCreated, 
    rma.UniqueIdNo, 
    line.RmaNumber, 
    line.RmaOriginalUniqueId, 
    line.ItemSequenceNo, 
    line.ItemNumber, 
    good = false 
} 

へ:私も匿名オブジェクト内のすべての変数の名前

select new 
{ 
    dtCreated = line.DatetimeCreated, 
    uniqueID = rma.UniqueIdNo, 
    rmaNumber = line.RmaNumber, 
    origUniqueID = line.RmaOriginalUniqueId, 
    itemSeqNo = line.ItemSequenceNo, 
    item = line.ItemNumber, 
    good = line.RmaNumber.Contains("/078") 
} 

、これが行いますメソッドに後で必要がある場合は、それらに簡単にアクセスする必要があります。 Containsの前に値をチェックするのは良い習慣ですが、最初のクエリではそうしています。

+0

これはうまくいくはずですが、私が言ったように、あなたはあなたのクエリで 'where line.RmaNumber!= null'というフィルタを使用しているので、とにかくNULLが得られません。あなたはその部分を放置することができます。 –

+0

ありがとうございます...もう1つの説明 - 現在のフィールド名を使用して私の問題 - IE:UniqueIdNo = rma.UniqueIdNo対ユニークIDとRmaNumberとrmaNumber? –

+0

あなたの名前が何であれ、明示的に名前を付ける習慣にすぎません。 –

0

匿名オブジェクトは読み取り専用です。一度作成すると変更できません。

この問題を解決するには、このためのクラスを作成し、必要なプロパティを追加してから、そのクラスをlinqクエリで使用して、その型のコレクションを設定します。

public class DataModel 
{ 

    public DateTime DatetimeCreated {get;set;} 
    ........................ 
    ........................ 
    // other properties that are needed 
} 

して、そのクラスを使用して、クエリのプロジェクトで

select new DataModel { 
    DateTimeCreated = line.DatetimeCreated, 
    ............. 
    ............. 
    // other properties 
}).ToArray(); 

は今、あなたは、コード内でダウンコレクションを変更することができるはずです。

関連する問題