#linq #entity-framework #linq-to-sql #linq-to-entities #linq-to-objects
#linq #структура сущностей #linq-to-sql #linq-to-entities #linq-to-objects
Вопрос:
edmx file: OrderData:
ORDERID
SHIPMENT
DRIVER_ID
RECEIVE_NAME
нам нужно создать таблицу и распечатать для каждого DRIVER_ID
первый столбец: DRIVER_ID
второй столбец: сколько строк с этим идентификатором ДРАЙВЕРА
третий столбец: сколько строк с этим идентификатором DRIVER_ID и имеет RECEIVE_NAME не null
пожалуйста, покажите мне, как это можно сделать … мне удалось напечатать только getquery:(
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:
Отредактировал ответ в соответствии с комментариями.
Я бы определил класс для включения результатов вашего запроса в первую очередь:
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. В вашем случае кажется, что вы хотите отображать только данные, поэтому более простой элемент управления (такой как повторитель) может оказаться более подходящим.
Комментарии:
1. можете ли вы не использовать функцию getsomeresults и показать мне, как вы используете приведенный выше код без использования GetSomeResults … можете ли вы создать функцию «count_drivers_orders», код, который я вставил, был просто для примера… на этот раз я вставлю весь код, который у меня есть, в файл server.cs
2. Ваш код использует мою функцию GetSomeResults на стороне сервера … я ищу способ заменить эту функцию и получить только эту таблицу
3. ваш код выдал мне ошибку: «Ошибка 4 Имя ‘GetSomeResults’ не существует в текущем контексте
4. IQueryable<OrderView> results= rep.GetSomeResults(); обратите внимание, что эта строка отсутствовала в вашем коде
5. Хорошо, я предпринял еще одну попытку помочь вам заставить код работать. Вы можете попробовать и посмотреть, поможет ли это.