新的linq试图解决这个问题的实体。我有以下表格:
Customer: Cust_Id, Name
Orders: Order_Id
CustomerOrders: Cust_Id, Order_Id
我有一个类似的课程:
public class Customers
{
public List<Row> Rows { get; set; }
public Customers()
{
Rows = new List<Row>();
}
public class Row
{
public int Key { get; set; }
public string Name { get; set; }
public List<string> Order_Ids { get; set; }
}
}
Linq查询是这样的:
var query = from c in context.Customer
select new Customers.Row
{
Key = c.Cust_Id,
Name = c.Name,
Order_IDs = List<string>( ?? )
};
foreach (var row in query)
{
Customers.Rows.Add(row);
}
var serializer = new JavaScriptSerializer();
return serializer.Serialize(Customers);
我有'??',我可以使用子查询或其他东西从Order_Id
表中获取CustomerOrders
的列表吗?
现在,我只能考虑在填充后遍历Customers
表,然后再次查询数据库以获得每个客户的每个Order Id
数组。
答案 0 :(得分:3)
尝试这样的事情:
var query = from c in context.Customer
select new Customers.Row
{
Key = c.Cust_Id,
Name = c.Name,
Order_Ids = c.Rows.Select(row => row.Key.ToString()).ToList()
};
您拥有.Select(row => row.Key.ToString())
的地方可以设置所需的属性(密钥,名称等)。 Select method是IEnumerable
的扩展方法,它会返回您已经设置的属性类型的集合,在本例中是一个字符串集合,因为我使用ToString()
方法对其进行了转换。
答案 1 :(得分:3)
如果不是必需项,请从“Customer”对象中删除“Row”集合。这应该足够了:
public class Customer
{
public int Key { get; set; }
public string Name { get; set; }
public List<string> Order_Ids { get; set; }
}
然后你可以像这样查询:
var customers = from c in context.Customers
select new Customer
{
Key = c.Cust_Id,
Name = c.Name,
Order_IDs = c.Orders.Select(o => o.Order_Id).ToList()
};
最好在编写C#和使用EF时处理对象,而不是处理表和行 - 无关紧要。