如何在C#中为linq选择新命令的结果添加项目?

时间:2012-04-26 17:15:48

标签: c# linq

在C#中使用linq我有一个像:

这样的查询
var result = from p in cart select new { p.Product.Title, p.Product.Price };

现在我想添加一些其他项目。例如,添加:

int weight;
string message;

这样我可以拥有类似的东西:

foreach( var r in result)
{
   dosomething(r.weight;)
   dosomething(r.message);
   dosomething(r.title);
   dosomething(r.price);
  }

有可能吗?我应该怎么做?

4 个答案:

答案 0 :(得分:7)

您需要创建新项目。你可以这样做吗?

var result = from p in cart select new { Title = p.Product.Title,
                                         Price = p.Product.Price,
                                         Weight = 0,
                                         Message = null }; 

答案 1 :(得分:2)

选择新创建匿名类型,这样您就无法在创建属性后添加该属性,但您可以做的一件事是创建自己的类型并在查询中分配属性值,然后再分配其他属性值..

//your class will be 
class MyClass
{
     float weight {get;set;}
     string Title {get;set;}
     float price {get;set;}
     string message {get;set;} 
}


   //select new will be     
    select new MyClass
    {
        Title =  p.Product.Title,
        price =  p.Product.Price,
        weight = 0,
        message = string.empty
    }

答案 2 :(得分:1)

你做不到。匿名类型是普通类型,它们在编译时是固定的。你以后不能改变它们。


编辑: 您可以为结果集创建容器类,然后根据该选择进行选择: 类MyResult

class MyResult
{
    public string Title { get; set; }
    public double Price { get; set; }
    public double Weight { get; set; }
    public string Message { get; set; }
}

然后你可以使用:

    var query = from t in cart
                select new MyResult
                {
                    Title = t.ProductTitle,
                    Price = t.Product.Price
                };

稍后你可以这样做:

foreach( var r in result)
{
   dosomething(r.Wight;)
   dosomething(r.Message);
   dosomething(r.Title);
   dosomething(r.Price);
  }

答案 3 :(得分:0)

您可以执行以下操作:

var result = from p in cart select new { p.Product.Title, p.Product.Price, Weight = 55, Message ="message" };