Linq to Entities子查询填充数组?

时间:2012-12-10 22:06:06

标签: c# asp.net linq linq-to-entities

新的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数组。

2 个答案:

答案 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 methodIEnumerable的扩展方法,它会返回您已经设置的属性类型的集合,在本例中是一个字符串集合,因为我使用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时处理对象,而不是处理表和行 - 无关紧要。