在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);
}
有可能吗?我应该怎么做?
答案 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" };