Используйте пользовательский метод в запросе LINQ2DB ⇐ C#

Место общения программистов C#
Anonymous
Используйте пользовательский метод в запросе LINQ2DB

Сообщение Anonymous »

I'm using linq2db version 5.3.2 (unfortunately, I cannot upgrade because the application is tied to other applications, and version incompatibility would cause issues).
In my query I need to use a method that removes non-numeric characters (e.g., turning "A54778" into 54778).
I wrote a custom method for this, but I get Ошибка, потому что LINQ2DB не поддерживает мой пользовательский метод ExtractNumber. Я также пытался использовать regex.replace (d.invoiceNumber.toString (), «[^0-9]», «», «) вместо этого, но столкнулся с той же проблемой.
Если я сначала загружаю все данные в память, пользовательский метод работает без проблем, но объем данных очень большой, создавая этот подход. функция)? < /p>
public void InsertPayoffData()
{
using var db = _db();

var query =
from p in db.Payoff1C
join d in db.Debit on new { Number = p.InvoiceNumber, Date = p.InvoiceDate }
equals new { Number = ExtractNumber(d.InvoiceNumber.ToString()), Date = d.InvoiceDate }
join k in db.Kredit on new { Number = p.PayDocNumber.ToString(), Date = p.PayDocDate }
equals new { Number = ExtractNumber(k.PayDocNumber.ToString()), Date = k.PayDocDate }
where !db.Payoff.Any(pf =>
pf.Debit_ID == d.DebitId &&
pf.Kredit_ID == k.Kredit_ID)
select new Payoff
{
Debit_ID = d.DebitId,
Kredit_ID = k.Kredit_ID,
PayoffDate = p.PayDocDate,
PayoffSum = p.PayOffSum,
PayoffType = 0
};

var result = query.ToList();
db.BulkInsert(result);
}

private int ExtractNumber(string value)
{
if (string.IsNullOrEmpty(value))
{
return 0;
}

var numberString = new string(value.Where(char.IsDigit).ToArray());
return int.TryParse(numberString, out int result) ? result : 0;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... q2db-query

Вернуться в «C#»