1

在使用 linq 的 C# 中,我有一个类似的查询:

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

4 回答 4

7

您需要创建新项目。你能做这样的事情吗?

var result = from p in cart select new { Title = p.Product.Title,
                                         Price = p.Product.Price,
                                         Weight = 0,
                                         Message = null }; 
于 2012-04-26T17:19:23.887 回答
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
    }
于 2012-04-26T17:19:38.490 回答
1

你不能那样做。匿名类型是普通类型,它们在编译时是固定的。您以后无法更改它们。


编辑:您可以为您的结果集创建一个容器类,然后根据它进行选择:class 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);
  }
于 2012-04-26T17:19:35.557 回答
0

您可以执行以下操作:

var result = from p in cart select new { p.Product.Title, p.Product.Price, Weight = 55, Message ="message" };
于 2012-04-26T17:20:11.377 回答