2017-04-26 18 views
0

私はそのようなことが可能であるとは確信していません。しかし、私は列名として変数を使用したい。以下はasp.net mvcの列名として文字列変数を使用する方法

私は

cartall.CartItems = cartdatas.Select(a => new Models.DTO.CartDTO.CartVM() 
{ 
    VariationId = a.VariationId, 
    ColorName = a.ColorName, 
    StockInfo = rpstock.FirstOrDefault(x => x.Id == a.VariationId).Yellow 
}).ToList(); 

を使用する必要があります。しかし、私は以下のように使用するコードです。

私が使用したいコード:

cartall.CartItems = cartdatas.Select(a => new Models.DTO.CartDTO.CartVM() 
{ 
    VariationId = a.VariationId, 
    ColorName = a.ColorName, 
    StockInfo = rpstock.FirstOrDefault(x => x.Id == a.VariationId).(a.ColorName) 
}).ToList(); 

マイStock.cs

public class Stock:Base.BaseEntity 
{ 
    public int Id { get; set; } 
    public int? Yellow { get; set; } 
    public int? Red { get; set; } 
    public int? White { get; set; } 

    public virtual VariationEntity.Variation Variation { get; set; } 
} 

マイVariation.cs

public class Variation : Base.BaseEntity 
{ 
    public int Id { get; set; } 
    public int OwnerProductID { get; set; } 
    public string SKU { get; set; } 
    public short? Height { get; set; } 
    public short? Width { get; set; } 
    public decimal? Price { get; set; } 
    public string Delivery { get; set; } 
    public int? OrderLimit { get; set; } 

    public virtual StockEntity.Stock Stock { get; set; } 
} 

私はstock.cs間の1対1の関係を持っているにvariation.cs

答えて

0

これは動作するはずです:

StockInfo = rpstock.FirstOrDefault(x => x.Id == a.VariationId && x.ColorName == a.ColorName) 
+0

これは機能しません。 "ColorName"は列ではないためです。色を列として定義しました。 – senjizu

+0

次に、あなたのデータ型がどのようにレイアウトされているかを見るために、より多くのコードが必要になると思います。 –

+0

私の質問が更新されました – senjizu

0

私はその列のvalueを返すlistがかかりますMethodColumn Nameを作成しました。これを確認してください。

コード:

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    public class Stock 
    { 
     public int Id { get; set; } 
     public int? Yellow { get; set; } 
     public int? Red { get; set; } 
     public int? White { get; set; } 
    } 

    public static void Main() 
    { 
     List<Stock> list = new List<Stock>(); 
     list.Add(new Stock(){Id=1, Yellow = 50, Red = 0, White = 205}); 
     list.Add(new Stock(){Id=2, Yellow = 20, Red = 200, White = 35}); 
     list.Add(new Stock(){Id=3, Yellow = 0, Red = 100, White = 155}); 

     string ColumnName = "Yellow"; 

     var Test1 = GetColumnValue(list.Where(m=>m.Id == 1).ToList(), ColumnName); 
     var Test2 = GetColumnValue(list.Where(m=>m.Id == 2).ToList(), ColumnName); 
     var Test3 = GetColumnValue(list.Where(m=>m.Id == 3).ToList(), ColumnName); 

     Console.WriteLine(Test1); 
     Console.WriteLine(Test2); 
     Console.WriteLine(Test3); 
    } 

    public static object GetColumnValue(List<Stock> items, string columnName) 
    { 
     var values = items.Select(x => x.GetType().GetProperty(columnName).GetValue(x)).FirstOrDefault(); 
     return values; 
    } 
} 

あなたはこのようなあなたのコード内のメソッドGetColumnValueを使用する必要があります。

cartall.CartItems = cartdatas.Select(a => new Models.DTO.CartDTO.CartVM() 
{ 
    VariationId = a.VariationId, 
    ColorName = a.ColorName, 
    StockInfo = GetColumnValue(rpstock.FirstOrDefault(x => x.Id == a.VariationId).ToList(), a.ColorName) 
}).ToList(); 

あなたはDotNetFiddleにこのソリューションを実行することができます。

+0

imho、あなたはタグ 'entity-framework'を見逃しています。あなたのコードは、linqのオブジェクトに対しては正しく動作しますが、linqのエンティティに対してはうまく動作しません。 – tschmit007

+0

あなたの答えをありがとう。それは正常に働いたが、私はテーブルの構造を変更します、それはより便利になります。 – senjizu

関連する問題