LINQ Entity Framework - СЧЕТ И ЗАПРОС - PullRequest
1 голос
/ 05 ноября 2011
edmx file: OrderData:
ORDERID
SHIPMENT
DRIVER_ID
RECEIVE_NAME

нам нужно построить таблицу и напечатать для каждого DRIVER_ID первый столбец: DRIVER_ID второй столбец: сколько строк с этим DRIVER_ID третий столбец: сколько строк с этим DRIVER_ID и RECEIVE_NAME не равно нулю

, пожалуйста, покажи мне, как это можно сделать ... Мне удалось напечатать только запрос: (

    SERVER.CS

    public class OrderDataRepository : BaseRepository<OrderData>
    {


        public class OrderDataResults
        {
            public long DriverId { get; set; }
            public int OrderCount { get; set; }
            public int OrderCountWhereNameIsNotNull { get; set; }
        }




        public class OrderViewRepository : BaseRepository<OrderData>
        {
            public List<OrderDataResults> GetOrderDataResults()
            {
                return GetQuery().
                       Where(x => x.SHIPMENT != null).
                       GroupBy(o => o.DRIVER_ID).
                       Select(g =>
                                 new OrderDataResults
                                 {
                                     DriverId = g.Key,
                                     OrderCount = g.Count(),
                                     OrderCountWhereNameIsNotNull =
                                                       g.Count(o => o.RECEIVE_NAME != null)
                                 }).ToList();
            }
        }







    CLIENT.ASPX.CS

    public partial class Control : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {

            var rep = new OrderViewRepository();
            List<OrderDataResults> results = GetOrderDataResults();

**Error 12  The name 'GetOrderDataResults' does not exist in the current context
Error   11  The type or namespace name 'OrderDataResults' could not be found (are you missing a using directive or an assembly reference?)
**
            DataViewer.DataSource = results;
            DataViewer.DataBind();

        }


    }


    WEBPAGE.ASPX
<form id="Form1" runat="server">
        <asp:GridView runat="server" ID="DataViewer">
        </asp:GridView>
    </form>

1 Ответ

2 голосов
/ 05 ноября 2011

Отредактировал ответ по комментариям.
Я бы определил класс для включения результатов вашего запроса:

public class OrderDataResults // Or whatever you want to call it
{
    public int DriverId { get; set; }
    public int OrderCount { get; set; }
    public int OrderCountWhereNameIsNotNull { get; set; }
}

С вашего сервера вы можете вернуть список из них:

public class OrderViewRepository : BaseRepository<OrderView>
{
    public List<OrderDataResults> GetOrderDataResults()
    {
        return GetQuery().
               Where(x => x.SHIPMENT != null).
               GroupBy(o => o.DRIVER_ID).
               Select(g =>
                         new OrderDataResults
                         {
                             DriverId = g.Key,
                             OrderCount = g.Count(),
                             OrderCountWhereNameIsNotNull = 
                                               g.Count(o => o.RECEIVE_NAME != null)
                         }).ToList();
    }
}

А при загрузке страницы вы можете вызвать метод GetOrderDataResults() и получить свой список:

protected void Page_Load(object sender, EventArgs e)
{
    var rep = new OrderViewRepository();
    List<OrderDataResults> results = rep.GetOrderDataResults();

    DataViewer.DataSource = results;
    DataViewer.DataBind();
}

Чтобы увидеть результаты, просто удалите раздел <Columns> из определения GridView:

<asp:GridView runat="server" ID="DataViewer">
</asp:GridView>

И снова, вы, вероятно, захотите реорганизовать этот код и самостоятельно принять некоторые структурные решения, как только этот код заработает (например, решите, хотите ли вы вернуть список из своего репозитория и т. Д.).
Кроме того, вы, вероятно, захотите настроить внешний вид таблицы, поэтому вы можете обратиться к документации GridView . В вашем случае кажется, что вы хотите отображать только данные, поэтому более простое управление (например, Repeater ) может оказаться более подходящим.

...