Что-то не так с моим кодом, но я не могу понять, что это может быть!
Я работаю над консольным приложением C#, которое считывает данные из CSV-файла в пользовательский список объектов и обрабатывает их с помощью LINQ. По большей части приложение компилируется отлично, за исключением двух конкретных строк, где я пытаюсь извлечь уникальные значения и записать их в текстовые файлы. В частности, IDE выдает красную ошибку времени компиляции, указывающую на конец моей цепочки LINQ, где я пытаюсь использовать Distinct() и ForEach().
Интересно, что очень похожий запрос работает совершенно нормально ранее в коде, когда я использую számlák.Select(x => x.PályázatKód).Distinct().Count(). Однако, как только я пытаюсь перебрать отдельные значения, чтобы записать их в файл с помощью StreamWriter, компилятор отклоняет это. Кажется, ошибка возникает прямо во время перехода Distinct().ForEach(...), но я не могу точно определить, какое именно несоответствие типов или отсутствующая ссылка вызывает ее.
Для контекста мой класс Szamla правильно определен со стандартными автоматически реализуемыми свойствами и рабочим конструктором. Данные правильно считываются из файла szamlak.csv, а такие операции, как Count() и Sum(), выполняются без каких-либо проблем. Я уже убедился, что пространство имен System.Linq включено в начало моих файлов. Что мне не хватает в том, как Distinct() передает данные по цепочке, которая предотвращает выполнение ForEach? Как мне правильно перебрать эти отфильтрованные результаты и записать их в выходные файлы?
Класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VizsgaKonzol
{
internal class Szamla
{
private string pályázatKód;
private string számlaszám;
private string dátum;
private int érték;
private string költségTípus;
public string PályázatKód { get => pályázatKód; set => pályázatKód = value; }
public string Számlaszám { get => számlaszám; set => számlaszám = value; }
public string Dátum { get => dátum; set => dátum = value; }
public int Érték { get => érték; set => érték = value; }
public string KöltségTípus { get => költségTípus; set => költségTípus = value; }
public Szamla(string pályázatKód, string számlaszám, string dátum, int érték, string költségTípus)
{
this.pályázatKód = pályázatKód;
this.számlaszám = számlaszám;
this.dátum = dátum;
this.érték = érték;
this.költségTípus = költségTípus;
}
public override string ToString()
{
return $"{pályázatKód}: {dátum} - {érték} Ft - {számlaszám} - {költségTípus}";
}
}
}
Program.cs:
using System.Threading.Channels;
using VizsgaKonzol;
List számlák = new List();
using (StreamReader reader = new StreamReader("szamlak.csv"))
{
reader.ReadLine();
while (!reader.EndOfStream)
{
string[] line = reader.ReadLine().Split(';');
számlák.Add(new Szamla(line[0], line[1], line[2], int.Parse(line[3]), line[4]));
}
}
var a = számlák.OrderBy(x => x.PályázatKód);
Console.WriteLine("3. feladat:\n\tA fájl beolvasása és eltárolása kész.");
Console.WriteLine($"4. feladat:\n\tA fájlban lévő számlák darabszáma: {számlák.Count}.");
Console.WriteLine($"5. feladat:\n\tA számlák összértéke: {számlák.Sum(x => x.Érték).ToString("##,#")} Ft.");
Console.WriteLine($"6. feladat:\n\t{számlák.Select(x => x.PályázatKód).Distinct().Count()} db különböző pályázat készült.");
using (StreamWriter sw = new StreamWriter("kodok.txt"))
{
számlák.OrderBy(x => x.PályázatKód).Select(x => x.PályázatKód).Distinct().ForEach(x => sw.Write($"{x}\n"));
}
Console.WriteLine("3. feladat:\n\tA kodok.txt fájl kész.");
using (StreamWriter sw = new StreamWriter("koltseg_tipusok.txt"))
{
számlák.OrderBy(x => x.KöltségTípus).Select(x => x.KöltségTípus).Distinct().ForEach(x => sw.Write($"{x}\n"));
}
Console.WriteLine("3. feladat:\n\tA koltseg_tipusok.txt fájl kész.");
Console.Write("9. feladat:\n\tAdja meg a keresett pályázat sorszámát: ");
string beker = Console.ReadLine();
if (beker.Length > 3)
{
Console.WriteLine("nem megfelelő számformátum, max 3 jegyű lehet!");
}
else
{
string nulla = "";
for (int i = 0; i < 3-beker.Length; i++)
{
nulla += "0";
}
nulla += beker;
beker = nulla;
}
List szűrt = számlák.Where(x => x.PályázatKód == $"P-{beker}").OrderBy(x => x.Dátum).ToList();
if (szűrt.Count > 0)
{
szűrt.ForEach(x => Console.WriteLine($"\t{x.ToString()}"));
Console.WriteLine($"\tÖsszesen {szűrt.Count} db számla tartozik hozzá.");
}
else { Console.WriteLine($"\tNincs ilyen pályázat: P-{beker}!"); }
Как исправить мои выражения LINQ с помощью Distinct()? ⇐ C#
Место общения программистов C#
-
Anonymous
1779142766
Anonymous
Что-то не так с моим кодом, но я не могу понять, что это может быть!
Я работаю над консольным приложением C#, которое считывает данные из CSV-файла в пользовательский список объектов и обрабатывает их с помощью LINQ. По большей части приложение компилируется отлично, за исключением двух конкретных строк, где я пытаюсь извлечь уникальные значения и записать их в текстовые файлы. В частности, IDE выдает красную ошибку времени компиляции, указывающую на конец моей цепочки LINQ, где я пытаюсь использовать Distinct() и ForEach().
Интересно, что очень похожий запрос работает совершенно нормально ранее в коде, когда я использую számlák.Select(x => x.PályázatKód).Distinct().Count(). Однако, как только я пытаюсь перебрать отдельные значения, чтобы записать их в файл с помощью StreamWriter, компилятор отклоняет это. Кажется, ошибка возникает прямо во время перехода Distinct().ForEach(...), но я не могу точно определить, какое именно несоответствие типов или отсутствующая ссылка вызывает ее.
Для контекста мой класс Szamla правильно определен со стандартными автоматически реализуемыми свойствами и рабочим конструктором. Данные правильно считываются из файла szamlak.csv, а такие операции, как Count() и Sum(), выполняются без каких-либо проблем. Я уже убедился, что пространство имен System.Linq включено в начало моих файлов. Что мне не хватает в том, как Distinct() передает данные по цепочке, которая предотвращает выполнение ForEach? Как мне правильно перебрать эти отфильтрованные результаты и записать их в выходные файлы?
Класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VizsgaKonzol
{
internal class Szamla
{
private string pályázatKód;
private string számlaszám;
private string dátum;
private int érték;
private string költségTípus;
public string PályázatKód { get => pályázatKód; set => pályázatKód = value; }
public string Számlaszám { get => számlaszám; set => számlaszám = value; }
public string Dátum { get => dátum; set => dátum = value; }
public int Érték { get => érték; set => érték = value; }
public string KöltségTípus { get => költségTípus; set => költségTípus = value; }
public Szamla(string pályázatKód, string számlaszám, string dátum, int érték, string költségTípus)
{
this.pályázatKód = pályázatKód;
this.számlaszám = számlaszám;
this.dátum = dátum;
this.érték = érték;
this.költségTípus = költségTípus;
}
public override string ToString()
{
return $"{pályázatKód}: {dátum} - {érték} Ft - {számlaszám} - {költségTípus}";
}
}
}
Program.cs:
using System.Threading.Channels;
using VizsgaKonzol;
List számlák = new List();
using (StreamReader reader = new StreamReader("szamlak.csv"))
{
reader.ReadLine();
while (!reader.EndOfStream)
{
string[] line = reader.ReadLine().Split(';');
számlák.Add(new Szamla(line[0], line[1], line[2], int.Parse(line[3]), line[4]));
}
}
var a = számlák.OrderBy(x => x.PályázatKód);
Console.WriteLine("3. feladat:\n\tA fájl beolvasása és eltárolása kész.");
Console.WriteLine($"4. feladat:\n\tA fájlban lévő számlák darabszáma: {számlák.Count}.");
Console.WriteLine($"5. feladat:\n\tA számlák összértéke: {számlák.Sum(x => x.Érték).ToString("##,#")} Ft.");
Console.WriteLine($"6. feladat:\n\t{számlák.Select(x => x.PályázatKód).Distinct().Count()} db különböző pályázat készült.");
using (StreamWriter sw = new StreamWriter("kodok.txt"))
{
számlák.OrderBy(x => x.PályázatKód).Select(x => x.PályázatKód).Distinct().ForEach(x => sw.Write($"{x}\n"));
}
Console.WriteLine("3. feladat:\n\tA kodok.txt fájl kész.");
using (StreamWriter sw = new StreamWriter("koltseg_tipusok.txt"))
{
számlák.OrderBy(x => x.KöltségTípus).Select(x => x.KöltségTípus).Distinct().ForEach(x => sw.Write($"{x}\n"));
}
Console.WriteLine("3. feladat:\n\tA koltseg_tipusok.txt fájl kész.");
Console.Write("9. feladat:\n\tAdja meg a keresett pályázat sorszámát: ");
string beker = Console.ReadLine();
if (beker.Length > 3)
{
Console.WriteLine("nem megfelelő számformátum, max 3 jegyű lehet!");
}
else
{
string nulla = "";
for (int i = 0; i < 3-beker.Length; i++)
{
nulla += "0";
}
nulla += beker;
beker = nulla;
}
List szűrt = számlák.Where(x => x.PályázatKód == $"P-{beker}").OrderBy(x => x.Dátum).ToList();
if (szűrt.Count > 0)
{
szűrt.ForEach(x => Console.WriteLine($"\t{x.ToString()}"));
Console.WriteLine($"\tÖsszesen {szűrt.Count} db számla tartozik hozzá.");
}
else { Console.WriteLine($"\tNincs ilyen pályázat: P-{beker}!"); }
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия