1

我有一个列表,其中包含一条记录,即与特定 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
  };

我打算做这样的事情,这将直接拉出该单条记录的 TimeZoneDisplayName 但它说“字符串不能用作布尔值”..

var practiceTimeZoneName 
       = selectedPracticeforEncounter
               .Single(practice=>practice.TimeZoneDisplayName

所以,我想问一下除了FOREACH是否可以通过某种方式完成?

4

3 回答 3

1
var practiceTimeZoneName=selectedPracticeforEncounter.Single().TimeZoneDisplayName
于 2012-12-05T11:37:10.767 回答
1

这是你需要的吗?First Or Default 将确保您获得一条记录或 null

var result = selectedPracticeInfo
             .Where(m=> m.PracticeID == (Int32)ddlPractice.SelectedValue)
             .FirstOrDefault();

if(result != null){

var timezone = result.TimeZoneDisplayName;

}

结果将是 PropPractice 的一种类型,但对于良好的实践,在您可以使用的地方强烈定义

PropPractice = selectedPracticeInfo
               .Where(m=> m.PracticeID == (Int32)ddlPractice.SelectedValue)
               .FirstOrDefault();

您不需要以下内容来创建新对象:

select new PropPractice
  {
    PracticeId = selectedPractice.PracticeId,
    PracticeName = selectedPractice.PracticeName,
    TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
  };
于 2012-12-05T11:38:42.640 回答
1

如果您只想要一个,请尝试将 .SingleOrDefualt 添加到 LINQ 查询的末尾

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:何时使用 SingleOrDefault 与 FirstOrDefault() 与过滤条件

于 2012-12-05T11:41:51.917 回答