2

我的代码:

public string LocName(string locID)
    {
        var name = (from a in idc.Locations
                    where a.ID.ToString() == locID
                    select a.Name).Single();
        return name;   
    }

我需要它将与 ID 匹配的位置名称作为 TextBlock 的字符串返回。相反,它不返回任何元素,我检查了 ID 是否正确,因此它应该至少返回一个元素。

我也试过:

where a.ID == new Guid(locID)

.First()
.FirstOrDefault()

已尝试将结果作为元素返回并对其进行数据绑定,但仍然 - 没有元素。

什么错误???

4

2 回答 2

2

如果数据存在,则必须是大小写问题,您应该始终使用ToUpper()它,因为它已针对字符串相等性检查进行了优化。

此外,如果有多个匹配项,您应该始终使用FirstOrDefaultas将引发异常,如果没有匹配项将引发异常。尝试:SingleFirst

编辑:我还添加Trim了输入值以清理空间。我还在locID参数上添加了一个空检查,因为如果它被传递为空,它会爆炸。最后,我??在语句上添加了一个 (coalesce)return以防它返回 null 并且您正在对该字符串执行其他操作(例如Trimor ToLowerCase),因为这会导致异常。

public string LocName(string locID)
{
    if (locID == null) return string.Empty;

    var name = (from a in idc.Locations
                where a.ID.ToString().Trim().ToUpper() == locID.Trim().ToUpper()
                select a.Name).FirstOrDefault();

    return name ?? string.Empty;   
}
于 2012-05-22T08:50:46.583 回答
1

Single()如果查询有多个匹配项,那么首先将引发异常。FirstOrDefault()如果您期望得到多个答案,我建议您使用。

此外,我会尝试使用Trim()ToUpper()消除任何可能阻止字符串匹配的空格/大小写问题。

于 2012-05-22T08:50:40.797 回答