Problem z pobraniem wartości z bazy danych sql server przez linq [c#]

Odpowiedz Nowy wątek
2019-04-27 23:23
0

Witam,
Uczę się aktualnie łączenia WPF c# z bazami danych. Na podstawie tego piszę aplikację na uczelnię, jednakże pojawił się pewien problem. O ile zapisywanie do bazy danych zachodzi bez zarzutu, tak odczyt z niej jest dla mnie kłopotliwy. Spędziłem już kilka godzin nad znalezieniem rozwiązania, ale jak na razie bez skutku. Początkowo miałem problem z pobraniem wartości z bazy danych do comboboxa w jednym okienku, pokombinowałem i udało się w końcu to ogarnąć, ale pojawił się kolejny problem - jak różnymi sposobami chce pobrać wartość wybranego pola combobox, czy też po prostu wartość z bazy danych poprzez Linq, zamiast otrzymać ową wartość, otrzymuje zwrotnie nazwa_bazy_danych.nazwa_tabeli (w moim przypadku plastus.posts). Macie jakies pomysły, jak to ogarnąć? Poniżej zamieszczam kod. Sorki za sporo kodu - śmieci w komentarzach, ale są tam niektóre użyte pomysły, które też nie działały, ale zostawiłem je "na później", w razie jakbym chciał na nich jeszcze pracować. Bazę danych utworzyłem w sql server. Bardzo prosze Was o pomoc, bo powoli kończą mi sie pomysły jak i tutki na necie, a chce to skończyć (i nauczyć się w 100% podstaw robienia tego typu aplikacji, abym potem mógl się w tym rozwijać)

Kod window1.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace plastusiowy_pamietnik
{
    /// <summary>
    /// Logika interakcji dla klasy Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        DateTime kal;

        public Window1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            /*

             var context = new plastusEntities2();

            var post = new posts()
            {

                title = WpisTytul.Text,
                text = WpisText.Text,
                tags = tags.Text,
                whenAdded = DateTime.Now

            };
            context.posts.Add(post);
            context.SaveChanges();

             var idPosta = context.posts
            .Where(b => b.title == WpisTytul.Text)
            .Select(s => s.id);*/

            DateTime kal = (DateTime)kalendarz.SelectedDate;

            Window2 third = new Window2(kal);
            third.ShowDialog();

        }

    }
}

Kod window2.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace plastusiowy_pamietnik
{
    /// <summary>
    /// Logika interakcji dla klasy Window2.xaml
    /// </summary>
    public partial class Window2 : Window
    {

        public Window2(DateTime kal)
        {
            InitializeComponent();

            /*
            using (plastusEntities2 ctx = new plastusEntities2())
            {
                var zapytanie = ctx.posts.ToList().Select(m => m).ToList();

                lista.ItemsSource = zapytanie.ToString();
                lista.DisplayMemberPath = "title";
            }
            */

            plastusEntities2 dc = new plastusEntities2();
            var stu = from plastusEntities2 in dc.posts where plastusEntities2.whenAdded == kal
                      select plastusEntities2;

            lista.ItemsSource = stu.ToList();
            lista.DisplayMemberPath = "title";

        }
        //var zapytanie = ctx.posts.ToList().Select(m => m).Where(b => b.whenAdded == kalendarz).ToList();

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }
        private void pobierzPoDacie()
        {
            /*
            List<posts> posty = new List<posts>();

            var context = new plastusEntities2();

            posty = context.posts.Where(b => b.whenAdded == kalendarz).Select(s => s).ToList();

            if (String.IsNullOrEmpty(posty.ToString()))
                MessageBox.Show(":)");
                */

        }

        private void wybierz_Click(object sender, RoutedEventArgs e)
        {
            /*
            plastusEntities2 dc = new plastusEntities2();
            var stu = from plastusEntities2 in dc.posts
                      where plastusEntities2.id == lista.SelectedIndex+1
                      select plastusEntities2;
                      */

            //string tytul = lista.Items[lista.SelectedIndex].ToString();
            string tytul = lista.Items[lista.SelectedIndex].ToString();

            plastusEntities2 dc = new plastusEntities2();
            var stu = from plastusEntities2 in dc.posts
                      where plastusEntities2.title == tytul
                      select plastusEntities2;

            MessageBox.Show(lista.Items[lista.SelectedIndex].ToString());

            foreach (var cust in stu)
            {
                title.Text = cust.title;
                text.Text = cust.text;
            }
        }
        /*
private void lista_Loaded(object sender, RoutedEventArgs e)
{

}*/
    }
}

Pozostało 580 znaków

2019-04-28 10:10
0
var stu = from plastusEntities2 in dc.posts where plastusEntities2.whenAdded == kal
                      select plastusEntities2;

Zmodyfikuj tego where'a bo pewnie przez to nie pokazuje żadnego postu.


Loading...

Pozostało 580 znaków

2019-04-28 11:57
0

Jasne, a masz jakiś pomysł jak to zmodyfikować? Bo ja na razie brak pomyslu. :/

Pozostało 580 znaków

2019-04-28 21:58
0

Zależy co chcesz uzyskać. Jeśli chcesz pokazać posty, który zostały dodane później niż data z kalendarza to:

var stu = from plastusEntities2 in dc.posts where plastusEntities2.whenAdded > kal
                      select plastusEntities2;

No i trochę poćwicz nad czytelnością kodu, bo raz jest plastusEntities2 jako klasa do tego z małej litery, potem w query jest użyta ta nazwa, generalnie można zgłupieć ;)
Samo tworzenie kontekstu db lepiej wrzucić w using, która automatycznie wywoła Dispose


Loading...

Pozostało 580 znaków

2019-04-28 22:09
0

Wiem właśnie, ze z moim kodem to tak średnio, ale cóż, troszke zagubiony jeszcze jestem w linq i entityframework :/
A jakbym chciał pobrać posty z danego dnia, to jakby mial wygladać ten where? tak jak napisałem?

Pozostało 580 znaków

2019-04-28 22:37
1

Nie do końca, bo czasu nie chcesz porównywać tylko datę więc coś takiego plastusEntities2.whenAdded.Date == kal.Date


Loading...
edytowany 1x, ostatnio: jarzi, 2019-04-28 22:40

Pozostało 580 znaków

2019-04-29 02:25
0

Okej, to została jeszcze tylko jedna kwestia - dlaczego jak próbuje pobrać wartosc najpierw pobrana z bazy danych i wstawiona do comboboxa (wyswietal w comboboxie wartosci), to przy próbie pobierania wartości z tego comboboxa potem wyswietal mi "plastus.posts"? Przez to nie mogę stworzyć pobierania postow z bazu damych po wybraniu jego z comboboxa. tego kodu chyba juz w komenatrzach nie ma (na pobieranie z bazy po tytulach), ale bliźnaiczy kod próbujacy pobierac po id wklejam na dole (tez zwraca plastus.posts)



``` /*
            plastusEntities2 dc = new plastusEntities2();
            var stu = from plastusEntities2 in dc.posts
                      where plastusEntities2.id == lista.SelectedIndex+1
                      select plastusEntities2;
                      */

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0