在linq查询中无法按字母顺序列出我的数据

时间:2019-07-04 21:36:48

标签: c# linq

我想使用以下方法按字母顺序列出我的数据。但是,姓名和姓氏不会定期列出。期待您的帮助和建议。谢谢。

var tempData = Payrolls
.Join(Users, pyr => pyr.UsersId, usr => usr.UsersId, (pyr, usr) => new { pyr, usr })
.Join(UserRegisters, usr => usr.usr.UsersId, urg => urg.UsersId, (usr, urg) => new { usr, urg })
.OrderBy(p => p.usr.usr.UserSurname)
.ThenBy(p => p.usr.usr.UserName)
.OrderBy(p => p.usr.pyr.SalaryMonth)
.ThenBy(p => p.usr.pyr.SalaryYear)
.Select(p => new
{
    PayrollId = p.usr.pyr.PayrollId,
    PersonnelId = p.usr.pyr.UsersId,
    IdentNumber = p.usr.usr.IdentNumber.Decrypt(),
    PersonnelName = p.usr.usr.UserName.Decrypt(),
    PersonnelSurname = p.usr.usr.UserSurname.Decrypt(),
    SalaryMonth = p.usr.pyr.SalaryMonth,
    SalaryYear = p.usr.pyr.SalaryYear,
    WorkerRegNo = p.urg.WorkerRegNo.Decrypt(),
    NetPaid = p.usr.pyr.NetPaid2
})
.Take(100)
.ToList();

我用OrderByThenBy尝试了不同的方法。交易结束 ...当我用OrderBy书写时,它在String.Decrypt方法的Decrypt()中给出了错误,尤其是在对加密区域进行排序时。例如:

....
OrderBy (p => p.SlaryMonth)
...
ThenBy (P => p.UserName.Decrypt ()) <--- throws an error when I add this place.

2 个答案:

答案 0 :(得分:2)

您已经使用ThenBy进行了后续排序,但是随后在新的OrderBy上进行了链接,从而开始了新的排序并丢弃了先前的排序。您需要将第二个OrderBy呼叫更改为ThenBy

.OrderBy(p => p.usr.usr.UserSurname)
.ThenBy(p => p.usr.usr.UserName)
.ThenBy(p => p.usr.pyr.SalaryMonth)
.ThenBy(p => p.usr.pyr.SalaryYear)

最后,如果按Decrypt进行排序会引发错误,则表明您的解密存在问题,而不是排序。

答案 1 :(得分:-1)

当我执行以下方法时,字母排序不会定期发生。

next

.OrderBy(p => p.usr.usr.PersonnelSurname)

如果我在行中添加解密 'System.String Decrypt(System.String)'方法不支持转换为SQL。我收到错误消息。

我认为排序问题是由于在排序期间无法转换数据的加密部分这一事实引起的。此时,我需要确保对加密的数据进行规范化,以便确保进行正确的排序。

我用来转换加密数据的方式如下

data_it = iter(data)
header = next(data_it)
for row in data_it:
     mycursor.execute(SQL_STATEMENT, row)