2016-07-22 3 views
0

1つの列だけを選択している限り、.Select()メソッドの有無にかかわらずviewmodel経由でLinqクエリ結果をビューに渡すことは問題ありません。私はこのような名前に変更欄で.Select()オプションを使用してみました場合:列名を変更したLinqメソッドをviewModelに追加

それが作成されます
var custodians = _custodian.Contacts 
    .Where(c => !(c.personid.StartsWith("RMR") || c.personid.StartsWith("GMS"))) 
    .Select(c => new { c.contactid, name = c.lname + ", " + c.fname}) 
    .ToList(); 

が作成System.Collections.Generic.List<<>f__AnonymousType1<int, string>>タイプリスト

I持って、私は私のビューに渡しています既存のViewModel:

public class AssetViewModel 
{ 
    public string PsgcTagNumber { get; set; } 
    public string[] AssetAttributes { get; set; } 
    public string Message { get; set; } 
    public Asset Asset { get; set; } 
    public Location Location { get; set; } 
    public string Custodian { get; set; } 
    public ?????? AllContacts { get; set; } 
} 

viewModelのAllContactsプロパティに使用するデータ型はわかりません。

誰かが正しい方向に向いていますか?

答えて

0

クラスを定義する必要があります。

public class Contact { 
    public int contactid {get;set;} 
    public string name {get;set;} 
} 

.Select(c => new Contact { contactid = c.contactid, name = c.lname + ", " + c.fname}) 

public Contact[] AllContacts { get; set; } 

またはちょうどあなたのクエリにSelect方法を行わず、単独のエンティティを残して、あなたのviewmodelにそれを使用する - あなたはあなたの名前を処理するために、そのようなFormattedNameプロパティか何かを追加することができます。

+0

渡される準備ができて。私は既にクラスを定義していましたが、そのクラスにselectをキャストしていませんでした。私は選択後にキャストしようとしていた。ありがとう –

0

あなたの匿名型の結果は、あなたの選択は、new { c.contactid, name = c.lname + ", " + c.fname}を生成しているまさにです - あなたのAssetViewModel.AllContactsあなたが最初にその型を定義する必要があるように、>文字列または{ int contactid, string name } のリストは、既存のモデルを使用する場合 - int型<のリストを、@Joeエノスを述べた後、あなたのクエリを少し更新して:あなたはそれを持っているので、その後

var vm = new AssetViewModel 
{ 
    PsgcTagNumber =..., 
    ..., 
    Custodian =..., 
    AllContacts = _custodian.Contacts 
       .Where(c => !(c.personid.StartsWith("RMR") || c.personid.StartsWith("GMS"))) 
       .Select(c => new Contact { c.contactid, name = c.lname + ", " + c.fname}) 
       .ToList(); 
} 

を:あなたのビューモデルは、開始され、私が行方不明になった部分ですそれ前方

関連する問題