0

LINQ を使用してビュー モデルにデータを追加する必要があります。私のビュー モデルは次のとおりです。

public class SearchScrapViewModel 
{ 
public WClass wClass{get; set;} 
public SClass sClass{get; set;} 
public YClass yClass { get; set; } 
} 

public class WClass 
{ 
public string title { get; set; } 
public string link { get; set; } 
} 
public class SClass 
{ 
public string title { get; set; } 
public string link { get; set; } 
} 
public class YClass 
{ 
public string title { get; set; } 
public string link { get; set; } 
}

これらの 3 つのクラスを 3 つの異なる LINQ クエリで使用してから、データをreturn View(SearchScrapViewModel);

var wikians = //LINQ Logic 
select new SearchScrapViewModel 
{ 
wClass.link = link.Attributes["href"].Value, //Error: I am not able to add to wClass 
wClass.title = link.InnerText 
}; 

他のクラスと同様に

return View(SearchScrapViewModel);次に、このコントローラーのビューで3つのクラスすべてにアクセスできるように渡します

どうやってするか?

4

3 に答える 3

1

WClassのインスタンスを作成するのを忘れました:

select new SearchScrapViewModel {
    wClass = new WClass { 
        link = link.Attributes["href"].Value,
        title = link.InnerText 
    }
}; 

または、WClass(およびSClassとYClass)をクラスの代わりに構造体にすることもできます。そうすれば、インスタンス化する必要はありません。ただし、その場合は、構造体を不変にする必要があります。

于 2012-06-06T06:12:25.877 に答える
0

LINQは万能ではありません。これが、探しているものに最適なアプローチであることを私は知りません。これを実現するには、ビルダーパターンを確認することをお勧めします。本当に必要な場合は、1つのLINQクエリで(オブジェクト初期化子を使用して)これを行うことができますが、ビルダーほどきれいに読み取れない可能性があります(ただし、これは私の2セントです)。

select new SearchScrapViewModel
{
    wClass = new wClass{title = xyz, link = xyz},
    sClass = new sClass...
    yClass = new yClass...
}
于 2012-06-06T06:12:14.200 に答える
0

あなたの例で選択ステートメントが必要な理由は私には明らかではありません。いずれにせよ、 SearchScrapViewModel を返すことはできません。これはインスタンスではなく型であるためです。この投稿のためにコードが単純化されていて、linq が必要でない限り、次のことをお勧めします。

var wikians = 
new SearchScrapViewModel {
    wClass = new WClass { 
        link = link.Attributes["href"].Value,
        title = link.InnerText 
    }
}; 

return View(wikians);
于 2012-06-06T19:46:11.967 に答える