我必须在数据库上执行select语句,然后将结果与Visual Studio中仅使用c#的文本文件进行比较。如果文本文件的值大于数据库中记录的值,则程序返回文本文件中的值,如果数据库中记录的值大于文本文件中的值,则程序返回数据库中的值。结果被添加到一个类WynikPorownania{}的列表中。用户在文件中键入产品的索引和值(在本例中,值是产品的可用性条件)。
例如:
文本文件是这样写的:
WYR_WR_CZ1 = 12
VIDIS_JIMU_BOX = 3
REREK_KOTEK_T = 5
在数据库中,这些索引连接到如下的可用性条件
WYR_WR_CZ1 = -1.0000
VIDIS_JIMU_BOX = -13.0000
REREK_KOTEK_T = 0.0000
现在程序应该返回WynikPorownania{}类列表中较大的值。
现在,我设法做到了这一点:我从选择查询中获取每条记录,并将其作为一个类放入列表中。我有一个函数检查指定索引的"standysp"(可用性条件)",并将文本文件值赋给一个字符串。我认为也许可以用这个"zwr"函数,也许是一个循环,但我真的不知道从现在开始该怎么做。这是我现在的代码:
using System;
using FirebirdSql.Data.FirebirdClient;
using System.Collections.Generic;
using System.Linq;
using System.IO;
namespace dokselect
{
class indexstan
{
public string index;
public double standysp;
}
class WynikPorownania
{
public string Indeks;
public int Ilosc;
}
class Program
{
public static void Main()
{
///////CONNECTION
string conn = "database=C:/PCBiznes/BAZA/IXION2_LOGMAG.FB;user=SYSDBA;password=masterkey;DataSource=192.168.24.112;Port=3050";
FbConnection myConnection = new FbConnection(conn);
FbDataReader myReader = null;
string sql = "select KARTOTEKA.indeks,STANMAG.standysp FROM kartoteka JOIN stanmag using(ID_KARTOTEKA);";
FbCommand myCommand = new FbCommand(sql, myConnection);
myConnection.Open();
myReader = myCommand.ExecuteReader();
///////LIST lista1
List<indexstan> lista1 = new List<indexstan>();
double standysp;
string index;
while (myReader.Read())
{
index = myReader[0].ToString();
standysp = Convert.ToDouble(myReader[1]);
lista1.Add(new indexstan { index=index, standysp=standysp });
//Console.WriteLine(myReader[0].ToString());
}
myConnection.Close();
Console.WriteLine(lista1.Count);
//RETURN STANDYSP FUNCTION
double zwr(string myIndex)
{
var result = lista1.FirstOrDefault(lista1 => lista1.index == myIndex).standysp;
return result;
}
zwr("EMPIS_DESKA_FASOLKA");
//READ FROM TXT
string path = "C:/Users/Praktykant/Documents/textdocs/dok1.txt";
string plik = File.ReadAllText(path);
//Console.WriteLine(plik);
StreamReader objReader = new StreamReader(path);
myConnection.Close();
}
}
你是说这样吗?
var list = File.ReadAllLines(path).Select(line =>
{
var tokens = line.Split("=");
var index = tokens[0];
var value = int.Parse(tokens[1]);
return new WynikPorownania
{
Indeks = index,
Ilosc = (int)Math.Max(value, zwr(index).standysp)
}
}).ToList();
(取决于文件的大小,StreamReader会比ReadAllLines
更好)
你就快成功了。
逐行提取文本文件,计算更大的值
StringReader r = new StringReader(plik);
string line;
while((line = r.ReadLine()) != null)
{
string index = line.Split('=')[0];
string textValue = line.Split('=')[1];
double biggerValue = Math.Max(
zwr(index),
double.Parse(textValue);
Console.WriteLine($"{index} > {biggerValue}");
}