Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 阅读列表<;定制类>;包含单个记录的_C#_Linq_Collections - Fatal编程技术网

C# 阅读列表<;定制类>;包含单个记录的

C# 阅读列表<;定制类>;包含单个记录的,c#,linq,collections,C#,Linq,Collections,我有一个列表,其中只有一条记录,即与特定ID匹配 现在我想使用这个列表的属性(,即单个记录的一列),而不使用FOREACH循环,因为它只会给服务器带来负担,因为我的程序已经有很多循环了。。。 能做到吗 我正在根据ID筛选从ViewState带来的记录 var selectedPracticeInfo = (List<PropPractice>) ViewState["dicPracticesInGrupWithTimeZone"]; var selectedP

我有一个列表,其中只有一条记录,即与特定ID匹配

现在我想使用这个列表的属性(,即单个记录的一列),而不使用FOREACH循环,因为它只会给服务器带来负担,因为我的程序已经有很多循环了。。。 能做到吗

我正在根据ID筛选从ViewState带来的记录

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();