![](/img/trans.png)
[英]How can I limit the DateTimePicker to only change the date, not the time?
[英]how I can limit the call to only one time for method "utilities.DecryptStringFromBase64String"
我從 web 服務調用之一獲取憑證數據,解密時,格式為“用戶名:::密碼”。 我還有其他 class,最后我正在創建數據 class,如下所示,
var lstStudents = new List<Student>
{
new Student
{
Name = "studen1",
Credentials = new List<Credential> {new Credential {Key = "N1", Cred = "pNn/B3yUB+x2yiC310efoAjb8EkNhH1oD3NYF0v5SNxUKPtOtpxL21saVJGjmYPi" }, new Credential { Key = "N2", Cred = "" }}
},
new Student
{
Name = "studen2",
Credentials = new List<Credential> {new Credential {Key = "N1", Cred = "PT7CpnUcG7DIrJTxN8CcqoHAyTbNNST3DzGLpGQUHF6/jyooYKW1puXb/a+WX2M8" }, new Credential { Key = "N2", Cred = "" }}
},
};
var filterList = lstStudents.SelectMany(x => x.Credentials.Select(y =>
new Data
{
StudentName = x.Name,
CredentialKey = y.Key,
UserName = utilities.DecryptStringFromBase64String(y.Cred, key).Before(":::") ,
Password = utilities.DecryptStringFromBase64String(y.Cred, key).After(":::")
}))
.Where(d => d.CredentialKey == "N1")
.ToList();
配套班級,
public class Data
{
public string StudentName { get; set; }
public string CredentialKey { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
public class Student
{
public string Name { get; set; }
public List<Credential> Credentials { get; set; }
}
public class Credential
{
public string Key { get; set; }
public string Cred { get; set; }
}
在上面的代碼中,我調用DecryptStringFromBase64String
方法 2 次,我只想調用它一次並准備我的數據 class,該怎么做? 謝謝!
如果您調整查詢以使用實際的 LINQ 語言語法(而不是擴展方法),這將更容易,因為您可以使用let
:
var filterList = (
from x in lstStudents
from y in x.Credentials
let s = utilities.DecryptStringFromBase64String(y.Cred, key)
let d = new Data
{
StudentName = x.Name,
CredentialKey = y.Key,
UserName = s.Before(":::"),
Password = s.After(":::")
}
where d.CredentialKey == "N1"
select d
).ToList();
或者更快地做where
,以避免一些計算/分配:
var filterList = (
from x in lstStudents
from y in x.Credentials
where y.Key == "N1"
let s = utilities.DecryptStringFromBase64String(y.Cred, key)
let d = new Data
{
StudentName = x.Name,
CredentialKey = y.Key,
UserName = s.Before(":::"),
Password = s.After(":::")
}
select d
).ToList();
就我個人而言,我也會更改所有x
、 y
、 s
、 d
以使其更有意義,但我現在讓它們保持不變,因此您可以看到它是如何映射的。
正如@Sinatr 在評論中指出的那樣,另一種方法是使用帶有正文的 lambda:
var filterList = lstStudents.SelectMany(x => x.Credentials.Select(y => {
var s = utilities.DecryptStringFromBase64String(y.Cred, key);
return new Data {
StudentName = x.Name,
CredentialKey = y.Key,
UserName = s.Before(":::") ,
Password = s.After(":::")
};
}))
.Where(d => d.CredentialKey == "N1")
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.