Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Entity Join не магу правильно сделать выборку

Привет всем!
Пишу запрос на Entity c использованием Join.

не магу написать Where для второй таблицы.
когда в конце пишу Where(c => c. ставлю точку и выпадают поля первой таблицы, а нужно как-то прописать условия Where ко второй. Простой скрипт на t-sql - пишется быстро, но в случае с Entity я запутался.

var AnonymusData = DataContext.Table1
          .Join(DataContext.Table2,
              c => c.Id,
              cm => cm.IdAlbom,
              (c, cm) => new
              {
                  IdObj = c.Id,
                  UserId = c.UserId,
                  Name = c.Name,
                  inCountry = c.inCountry,
                  inCity = c.inCity,
                  Date = c.Date,
                  description = c.description,
                  recommendations = c.recommendations,
                  transport = c.transport,
                  Photos = c.Photos,
                  PhotosChild = c.PhotosChild,
                 // OnSubscr = cm.IdAlbom,
                  PhotosCount = c.Photos.Count,
              }).
          Where(c => c.UserId == IdUser).// ошибка, нужно указать TAble2.WhoTakeAlbom = IdUser
          Where(x => x.PhotosCount > 0).
          OrderByDescending(x => x.IdObj).ToList();
Ответ:
var q =
    from c in Db.Table1
    join cm in Db.Table1 on c.ID equals cm.IdAlbom
    let photosCount = c.Photos.Count
    where photosCount > 0
    orderby c.Id descending
    select new
    {
                  IdObj = c.Id,
                  UserId = c.UserId,
                  Name = c.Name,
                  inCountry = c.inCountry,
                  inCity = c.inCity,
                  Date = c.Date,
                  description = c.description,
                  recommendations = c.recommendations,
                  transport = c.transport,
                  Photos = c.Photos,
                  PhotosChild = c.PhotosChild,
                 // OnSubscr = cm.IdAlbom,
                  PhotosCount = photosCount
    };

var result = q.ToList();
Вопрос: Как правильно сделать выборку? (MySQL JOIN'ы)

Добрый день! :)
Имеется такая задачка: две таблицы, в одной из них поля с id, названием товара и начальным количеством; в другой id_item, связанный вторичным ключом с items.id и количеством товара.


(IMG:)
(IMG:)

И нужно эти таблицы объединить таким образом, чтобы было как в примере:
(IMG:)

SQL запрос формата:
SELECT * FROM items INNER JOIN sold WHERE items.id = sold.id_item;
не работает.

В какую сторону копать? :huh:

Это сообщение отредактировал manstrik - 27.04.2015 - 13:32
Ответ: Типо такого



SELECT i.*,s.*,sum(s.quanity) as totalQuanity FROM items i JOIN sold s On s.id_item = i.id GROUP BY s.id_item

Вопрос: Как правильно сделать выборку из БД, используя Entity Framework?

Здравствуйте, использую Entity Framework. В моём wfa приложении есть DataGridView, которому я задаю такой DataSource:

productBindingSource.DataSource = context.Products.ToList();
metroGrid1.DataSource = productBindingSource;


Если задавать так, то всё работает (добавление, изменение), но тогда появляется проблема: в таблице есть поле menu_id и я хочу выводить не номер меню, а его название, но при такой выборке у меня это никак не получается.

Однако получается получить название меню, используя такой запрос:

var products = context.Products.Select(prd=> new
            {
                prd.id,
                prd.name,
                prd.price,
                Menu = prd.Menu.name
            });
            productBindingSource.DataSource = products.ToList();
            metroGrid1.DataSource = productBindingSource;


Но появляется другая проблема, у меня перестаёт работать добавление, изменение (ошибка в этой строчке):

productBindingSource.Add(frm.ProductInfo);


ProductInfo это свойство из 2-ой формы, которая возвращает объект типа Product:

public Product ProductInfo
        {
            get
            {
                return productBindingSource.Current as Product;
            }
        }


Текст ошибки:
Объекты, добавляемые к списку BindingSource, должны быть одного типа.

Ошибка понятна, но совершенно не понимаю как её решить. Заранее спасибо.
Ответ: Daniil S.,

Это касательно ошибки, которую ты хочешь победить. Но в целом, ты изначально всё делаешь неправильно. Найди какую-нибудь книжку, уроки, примеры какие-нибудь и изучай их. Одно дело подсказать, другое дело с нуля научить. На форуме никто тебя не научит, это невозможно.
Вопрос: Как сделать выборку по определенному критерию?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CLS
PRINT "                         Proekt benzokolonki"
PRINT
 
PRINT "Cena minimum"
PRINT
DIM bk$(10), top$(10), cena(10)
bk$(1) = "BashNeft'": top$(1) = "A95": cena(1) = 33
bk$(2) = "Lukoil": top$(2) = "A95": cena(2) = 30
bk$(3) = "TatNeft'": top$(3) = "A95": cena(3) = 20
bk$(4) = "SurgutNG": top$(4) = "A95": cena(4) = 31
bk$(5) = "MoscowTK": top$(5) = "A95": cena(5) = 35
bk$(6) = "BashNeft'": top$(6) = "A92": cena(6) = 30
bk$(7) = "Lukoil": top$(7) = "A92": cena(7) = 30
bk$(8) = "TetNeft'": top$(8) = "A92": cena(8) = 31
bk$(9) = "SurgutNG'": top$(9) = "A92": cena(9) = 30
bk$(10) = "MoscowTK": top$(10) = "A95": cena(10) = 31
 
INPUT "Marka benz", top$
min = cena(1)
FOR n = 1 TO 10
    IF min > cena(n) THEN min = cena(n): nz = n
NEXT n
PRINT bk$(nz), top$(nz), cena(nz)
нужно сделать выборку по определенному типу топлива и найти минимальную цену этого топлива
как я понял не хватает в строчке нахождения минимума оператора AND и еще одного критерия .
Подскажите пожалуйста.
Ответ: Условие такое. (Для ваших обозначений)
QBasic/QuickBASIC
1
IF min > cena(n) AND top2$ = top$(n) THEN min = cena(n): nz = n
Но есть одно НО! В строке 19 ошибка.
Вы вели переменную, имя которой совпадает с именем массива!
Вот и условие будет неверным. Правильнее переменную назвать
top2$ - что я и сделал в приведенном выше примере.
Вопрос: Можете проверить библиотеку я правильно сделал или нет пожалуйста?

Можете проверить библиотеку я правильно сделал или нет пожалуйста? Я по книге Иванова делал.
Ответ: MarcusRip, откуда в create_folder argc? И аргумент для create_folder сделай const void create_folder(const char *dirname)
И наверное, желательно проверку аргумента dirname сделать на валидность.
Вопрос: связи таблиц без FOREIGN KEY в Entity Framework

Коллеги, сразу оговорюсь я новичок и чего то я не понимаю в Entity Fr и прошу помочь куда мне надо изучать.
Есть продакшн База в ней есть таблицы в которых нет FOREIGN KEY:

TABLE "Printers"
("PrinterID" INT NOT NULL PRIMARY KEY,
"PrinterName" NVARCHAR(255))

TABLE "Jobs"
("JobID" INT NOT NULL PRIMARY KEY,
"PrinterID" INT ,
"DocumentName" NVARCHAR(255))

Отношения один (Printers. PrinterID) ко многим (Jobs. PrinterID). Для выборки данных в SQL я использую запрос:

Select * from Printers. PrinterID= Jobs. PrinterID

Встала задача сделать отчет средствами ASP.NET MVC. Для этого я создаю классы

public partial class Job
{
public int UserID { get; set; }
public int PrinterID { get; set; }
public string DocumentName { get; set; }
}

public partial class Printer
{
public int PrinterID { get; set; }
public string PrinterName { get; set; }
}

Встал вопрос как описать связи таблиц Entity Framework чтоб сделать выборку?
Извиняюсь если вопрос глуп и я отнял Ваше время
Ответ:
Shocker.Pro
в общем, что-то типа
from printer in MyContext.Printers
join job in MyContext.Jobs on printer.PrinterID equals job.PrinterID 
select new { printer.PrinterName, job.DocumentName }


Спасибо!! )) Буду пробовать!
Вопрос: Как правильно отсортировать выборку по полю, в котором есть число?

Доброго времени суток. Есть запрос:
PHP
1
$query = mysqli_query( $connect, "SELECT * FROM `list` WHERE `id` = 1 ORDER BY `episode` ASC LIMIT 100" );
Не выходит правильно отсортировать выборку. Беда в том, что поле episode имеет вид:
Код
1 строка
2 строка
3 строка
...
10 строка
11 строка
...
110 строка
И сортировка срабатывает не верно, а именно:
Код
1 строка
10 строка
11 строка
12 строка
...
2 строка
20 строка
21 строка
...
3 строка
......
Можно ли добиться адекватной сортировки, чтобы шли сначала единицы, затем десятки, а затем сотни по порядку?

p.s. сортировать по другому полю не могу, там нет нужной закономерности
Ответ: LawrenceRUS, не работал с ним. Видел ещё такой вариант, может он сработает:
SQL
1
ORDER BY -`episode` DESC
Вопрос: Как сделать выборку из таблицы на основе данных текущего юзера?

Собственно, вот. Имею проектик в ASP.NET с базой данных и авторизацией, работающей через EntityFramework. Стала задача: в контроллере надо сделать выборку по записям, но записи должны быть только те, которые сделал текущий аутентифицированный пользователь.

C#
1
2
3
4
5
6
7
8
9
public class InjectorDocumentsController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();
 
        // GET: InjectorDocuments
        public ActionResult Index()
        {
            return View(db.InjectorDocuments.[COLOR="Red"]ToList());[/COLOR] - тут имеем выборку всех записей всех пользователей
        }
сущность такова:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public class InjectorDocument
    {
        public Guid Id { get; set; }
        public Injector CurrentInjector { get; set; }
 
        public double CurrentRazmerAh { get; set; }
 
        public InjectorDocument()
        {
            Id = Guid.NewGuid();
        }
    }
Как тут лучше сделать? Прописать свойство:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class InjectorDocument
    {
        public Guid Id { get; set; }
        public Injector CurrentInjector { get; set; }
        public Guid CurrentUser {get; set;}
        public double CurrentRazmerAh { get; set; }
 
        public InjectorDocument()
        {
            Id = Guid.NewGuid();
            CurrentUser = [COLOR="red"]?[/COLOR] что тут прописать? 
        }
    }
Ответ: Все, нашел что мне надо.

Вопрос: нужно из базы сделать выборку по датам из формы

Всем привет. Начинаю познавать PHP и столкнулся с проблемой. Помогите разобраться.
Есть некая база MySql, в которую я записываю данные посредством PHP. Все проходит удачно. Теперь мне нужно из этой базы сделать выборку по датам из формы. Код формы для ввода параметров:

Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Вывод данных</title>
</head>

<body>
<fieldset>
<form method="post" action="result.php">
<label for="reg_date_min">С:</label><br/>
<input type="date" name="reg_date_min" size="30"><br/>
<label for="reg_date_max">По:</label><br/>
<input type="date" name="reg_date_max" size="30"><br/>
<label for="PhoneNumper">Номер телефона:</label><br/>
<input type="text" name="PhoneNumper" size="30"><br/>
<input id="submit" type="submit" name="search" value="Найти и вывести"><br/>
</form>
</fieldset>
<fieldset>
<form method="post" action="result.php">
<input id="submit" type="submit" name="all" value="Вывести всех пользователей"><br/>
</form>
</fieldset>
<a href="info_form.html">Добавить пользователя</a>
</body>
</html>

Ну и собственно скрипт, в котором запрос и выборка:

<?php
require_once "A:\home\local.lc\www\db.php";
//$result=mysql_query("SELECT * FROM `users`");
//$row=mysql_fetch_array($result);
if($_POST['all'])
{
    
$result=mysql_query("SELECT * FROM `users`");
    do
    {
        
$id $row['id'];
        
$PhoneNumper $row['PhoneNumper'];
        
$password $row['password'];
        
$reg_date $row['reg_date'];
        echo 
"$id ) $PhoneNumper | $password | $reg_date <br/><hr/>";
    }

while(
$row=mysql_fetch_array($result));
}
if(
$_POST['search'])
{
    
$datemin $_POST['reg_date_min']; // входящие данные "от" 
    
$datemax $_POST['reg_date_max']; // входящие данные "до" 
    
$datemin_time explode(".",$datemin); // разбивка значения на (.) 
    
$postdata_min mktime(0,0,0,$datemin_time[1],$datemin_time[0],$datemin_time[2]); // преобразуем в unix 
    
$datemax_time explode(".",$datemax); // разбивка значения на (.) 
    
$postdata_max mktime(0,0,0,$datemax_time[1],$datemax_time[0],$datemax_time[2]); // преобразуем в unix 
    
function unix_time_convert ($timestamp
        { 
            
$date date ("d.m.Y" $timestamp); 
            return 
$date;
        } 
    
$query mysql_query("SELECT * FROM users WHERE (data > ".$postdata_min." AND data < ".$postdata_max.") 
            ORDER BY data"
); 
    
$result mysql_query($query); 
    do
    { 
    echo 
''
    
$time $row['data']; 
    
$date unix_time_convert($time); 
    echo 
''.$date.''
    echo
' г.; '.$row['summa'].'; <br>'
    
$id $row['id'];
    
$PhoneNumper $row['PhoneNumper'];
    
$password $row['password'];
    
$reg_date $row['reg_date'];
    echo 
"$id ) $PhoneNumper | $password | $reg_date <br/><hr/>";
    } 
while(
$row mysql_fetch_array($result));
mysql_close();
}
?>

Выдает ошибку - "mysql_fetch_array() expects parameter 1 to be resource, boolean given in A:\home\test1.ru\www\result.php on line 48"

оформляй свои сообщения! для кода есть ббкод [code]. выделение синтаксиса: [code=php].
второй раз подтирать за тобой не буду.
  — модераторъ
Ответ: do {} while ((( срань
Вопрос: Не могу сделать выборку уже мучаюсь 2 дня и не получается

Здравствуйте

Помогите пожалуйста сделать выборку, вроде написано все верно а не работает в массив попадает куча всего, хотя на песочнице все нормально, прилагаю скрипт, посмотрите его пожалуйста
https://yadi.sk/d/agdfAVpJdhFu9

Код HTML5
1
2
3
4
5
6
<ul class="previews-slider">
    <li><img src="/d/26909/d/20043_3.jpg" data-src="/d/26909/d/20043_3.jpg" data-zoom-image="/d/26909/d/20043_3.jpg" alt=""></li>
    <li><img src="/d/26909/d/10665600_5.jpg" data-src="/d/26909/d/20044_3.jpg"  data-zoom-image="/d/26909/d/20044_3.jpg" alt=""></li>
    <li><img src="/d/26909/d/10665800_5.jpg" data-src="/d/26909/d/20045_3.jpg"  data-zoom-image="/d/26909/d/20045_3.jpg" alt=""></li> 
    <li><img src="/d/26909/d/10666000_5.jpg" data-src="/d/26909/d/20046_3.jpg"  data-zoom-image="/d/26909/d/20046_3.jpg" alt=""></li>                                           
</ul>
Код PHP
1
2
preg_match_all("#(<ul class=\"previews-slider\">.*</ul>)#uis", $content, $arrUlImage);
print_r($arrUlImage);
Ответ: Тему пересоздал, так как там были ошибки а исправить нельзя

Спасибо Вам огромное, дело было действительно в вопросике ))