C# 阅读列表<;定制类>;包含单个记录的
我有一个列表,其中只有一条记录,即与特定ID匹配 现在我想使用这个列表的属性(,即单个记录的一列),而不使用FOREACH循环,因为它只会给服务器带来负担,因为我的程序已经有很多循环了。。。 能做到吗 我正在根据ID筛选从ViewState带来的记录C# 阅读列表<;定制类>;包含单个记录的,c#,linq,collections,C#,Linq,Collections,我有一个列表,其中只有一条记录,即与特定ID匹配 现在我想使用这个列表的属性(,即单个记录的一列),而不使用FOREACH循环,因为它只会给服务器带来负担,因为我的程序已经有很多循环了。。。 能做到吗 我正在根据ID筛选从ViewState带来的记录 var selectedPracticeInfo = (List<PropPractice>) ViewState["dicPracticesInGrupWithTimeZone"]; var selectedP
var selectedPracticeInfo =
(List<PropPractice>) ViewState["dicPracticesInGrupWithTimeZone"];
var selectedPracticeforEncounter =
from selectedPractice in selectedPracticeInfo
where
selectedPractice.PracticeId
== Convert.ToInt32(ddlPractice.SelectedValue)
select new PropPractice
{
PracticeId = selectedPractice.PracticeId,
PracticeName = selectedPractice.PracticeName,
TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
};
所以,我想问一下,除了FOREACH之外,它是否可以通过某种方式实现?这是您所需要的吗?First或Default将确保获得单个记录或null
var practiceTimeZoneName=selectedPracticeforEncounter.Single().TimeZoneDisplayName
var result = selectedPracticeInfo
.Where(m=> m.PracticeID == (Int32)ddlPractice.SelectedValue)
.FirstOrDefault();
if(result != null){
var timezone = result.TimeZoneDisplayName;
}
结果将是一种实践,但对于良好的实践,在您可以使用的地方使用严格定义的方法
PropPractice = selectedPracticeInfo
.Where(m=> m.PracticeID == (Int32)ddlPractice.SelectedValue)
.FirstOrDefault();
创建新对象时,不需要以下选项:
select new PropPractice
{
PracticeId = selectedPractice.PracticeId,
PracticeName = selectedPractice.PracticeName,
TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
};
如果只需要一个,请尝试在LINQ查询的末尾添加.SingleOrDefualt
var selectedPracticeforEncounter = (from selectedPractice in selectedPracticeInfo
where selectedPractice.PracticeId == Convert.ToInt32(ddlPractice.SelectedValue)
select new PropPractice
{
PracticeId = selectedPractice.PracticeId,
PracticeName = selectedPractice.PracticeName,
TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
}).SingleOrDefault();
使用LINQ并不意味着你要避免循环-你只是看不到循环而已。另外,请注意,
IList
有一个ForEach
,但我同意@oded所说的。为什么你要在一个只有一个元素的列表上使用ForEach?如果你确定总是只有一条记录,你可以快速而肮脏地进行:selectedpracticeforcounter[0].TimeZoneDisplayName,但我会先检查SelectedPracticeForCounter是否包含任何元素。
var selectedPracticeforEncounter = (from selectedPractice in selectedPracticeInfo
where selectedPractice.PracticeId == Convert.ToInt32(ddlPractice.SelectedValue)
select new PropPractice
{
PracticeId = selectedPractice.PracticeId,
PracticeName = selectedPractice.PracticeName,
TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
}).SingleOrDefault();