C# 将MySQL查询转换为LinQ

C# 将MySQL查询转换为LinQ,c#,mysql,sql,linq,C#,Mysql,Sql,Linq,我有一个MySQL查询:这是一个工作查询 SELECT cash.cash_id, cash.cash_name, articles_cellars.cellar_name, cash_status.cashstatus_name, CASE cash.cashstatus_id WHEN 1 THEN CONCAT_WS(' ', users.user_firstname, users.user_lastname)

我有一个MySQL查询:这是一个工作查询

SELECT cash.cash_id, cash.cash_name, articles_cellars.cellar_name, cash_status.cashstatus_name, 
            CASE cash.cashstatus_id
               WHEN 1 THEN CONCAT_WS(' ', users.user_firstname, users.user_lastname)
               WHEN 2 THEN '[No Asignado]'
            END AS user_name,
            CASE cash.cashstatus_id
               WHEN 1 THEN (SELECT SUM(CASE WHEN cashtransactionstatus_id IN (1,3) THEN cashtransaction_amount END) -
                                   SUM(CASE WHEN cashtransactionstatus_id IN (2,4,5) THEN cashtransaction_amount END)
                                FROM cash_transactions 
                                    WHERE cashpaymenttype_id = 1
                                    AND cash_transactions.cashopeningassignment_id = cash_openings_assignments.cashopeningassignment_id)
               WHEN 2 THEN 0.00
            END AS cashtransaction_amount
    FROM cash
    LEFT JOIN articles_cellars USING(cellar_id)
    LEFT JOIN cash_status USING(cashstatus_id)
    LEFT JOIN cash_openings_assignments USING(cash_id)
    LEFT JOIN users USING(user_id);
我需要知道是否存在将该语句自动转换为C LinQ的工具

我现在的LinQ:

var LINQFilter =  from Cash in _DataTable_Cash.AsEnumerable()
join Cellars in _DataTable_Cellars.AsEnumerable()
  on Cash.Field<Int32>("cellar_id") equals Cellars.Field<Int32>("cellar_id")

join CashStatus in _DataTable_CashStatus.AsEnumerable()
  on Cash.Field<Int32>("cashstatus_id") equals CashStatus.Field<Int32>("cashstatus_id")

join CashOpeningsAssignments in _DataTable_CashOpeningsAssignments.AsEnumerable().Where(a => (a.Field<Int32>("cashopeningassignmentstatus_id") == 1 || a.Field<Int32>("cashopeningassignmentstatus_id") == 2)) // 1 Open ,2 Reopened Assignments
  on Cash.Field<Int32>("cash_id") equals CashOpeningsAssignments.Field<Int32>("cash_id") into into_cashopeningsassignments
from CashOpeningsAssignments in into_cashopeningsassignments.DefaultIfEmpty()

join Users in _DataTable_Users.AsEnumerable()
  on (CashOpeningsAssignments == null ? 0 : CashOpeningsAssignments.Field<Int32>("user_id")) equals Users.Field<Int32>("user_id") into into_users
from Users in into_users.DefaultIfEmpty()

select new 
{
    cash_id = Cash.Field<Int32>("cash_id"),
    cellar_name = Cellars.Field<String>("cellar_name"),
    cash_name = Cash.Field<String>("cash_name"),
    cashstatus_name = CashStatus.Field<String>("cashstatus_name"),
    user_name = (Users == null ? "[No Asignado]" : Users.Field<String>("user_firstname") + (Char)32 + Users.Field<String>("user_lastname")),
    cashtransaction_amount = 0.00 // Sum Problem
};

但是我在获取cashtransaction_amount时遇到问题

将SQL转换为Linq类似于Perl代码混淆竞赛:如果您使用的是EF,那么您可以在EF中运行原始SQL查询,因此如果您知道代码已经工作了,请使用它。否则,就转换的特定部分询问更具体的问题。Hy@BenjaminGruenbaum我需要得到cashtransaction\u amount列的结果