我正试图从我的SQL Server数据库中获取一行。我不知道如何得到它我尝试了很多方法,但我没有得到任何好的解决方案。
databasEntities db = new databasEntities();
var medlem = from medlemar in db.medlemar
where medlemar.namn == "Ali"
select medlemar;
这是我的数据库表Medlemar
:
答案 0 :(得分:5)
medlem将是一个对象的集合,所以你应该能够使用foreach或.first。
foreach(var m in medlem)
{
var namn = m.namm;
...
}
或
var m1 = medlem.First();
答案 1 :(得分:2)
我认为您需要使用FirstOrDefault()
之类的内容:
var medlem = from medlemar in db.medlemar
where medlemar.namn == "Ali"
select medlemar;
string nameFromVar = medlem.FirstOrDefault();
除了FirstOrDefault()
之外,您还可以使用其他选项:
但是在FirstOrDefault()
的情况下,它将返回第一个项目,或者在没有项目或更准确时返回null:
默认(TSource),如果source为空;否则,第一个元素 源。
答案 2 :(得分:2)
在C#中,var
不是无类型的。它实际上是一种隐式输入对象的方式,而无需输入整个类型名称。
例如:
var someString = "Any String Value";
和
string someString = "Any String Value";
编译为完全相同的IL。
因此,在您的情况下,LINQ返回IEnumerable<T>
集合,其中T是medlemar
对象的类型。
由于它是一个集合,您需要像访问任何其他集合一样访问它。一种可能是使用foreach
foreach(var m in medlem)
{
//Do Something
}
另一种可能性是调用ToList()
,然后按索引访问各个成员:
var medlemList = medlem.ToList();
var namn = medlemList[i].namn; // where i is some specific index in the collection
或者,如果您只想获取集合中的第一个对象,根据您的使用情况,您有多种选择:
var firstMedlem = medlem.Single();
var firstMedlem = medlem.First();
var firstMedlem = medlem.SingleOrDefault();
var firstMedlem = medlem.FirstOrDefault();
上面的每一个都大致相同,但如果集合有零个或多个对象,则表现不同。
Single()
将返回集合中的唯一对象。如果集合包含多个对象或零,则将引发异常。类似地,如果有多个对象,SingleOrDefault()
将抛出异常,但会返回default(T)
返回的值(通常为null,除非T是值类型)。
First()
将返回默认值,则{p> FirstOrDefault()
和First()
的行为方式也相同FirstOrDefault()
将引发异常。它们与Single..()
方法的不同之处在于,如果集合具有多个值,它们将始终返回第一个成员。
基本上,除非集合本身为null,否则FirstOrDefault()
将永远不会抛出异常。其他变体将在一个或多个案例中引发异常,具体取决于IEnumerable<T>
集合的内容。