5

新的 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从表中获取'sCustomerOrders列表吗?现在,我只能考虑在Customers表格填满后遍历表格,然后再次查询数据库以获取每个Order Id客户的每个数组。

4

2 回答 2

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 方法是一个扩展方法IEnumerable,它返回您设置的属性类型的集合,在这种情况下,是字符串的集合,因为我使用ToString() 方法对其进行了转换。

于 2012-12-10T22:08:59.337 回答
3

如果不是必需的,请从“客户”对象中删除“行”集合。这应该足够了:

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 时最好处理对象,而不是处理表和行 - 更少混淆。

于 2012-12-10T22:21:41.417 回答