从"Var"变量中获取值

The*_*ner 0 c# sql database sql-server select

我正试图从我的SQL Server数据库中获取一行.我不知道如何得到它我尝试了很多方法,但我没有得到任何好的解决方案.

databasEntities db = new databasEntities();
var medlem = from medlemar in db.medlemar
             where medlemar.namn == "Ali"
             select medlemar;
Run Code Online (Sandbox Code Playgroud)

这是我的数据库表Medlemar:

  • ID
  • NAMN
  • losen
  • epost

Dav*_*son 6

medlem将是一个对象的集合,所以你应该能够使用foreach或.first.

foreach(var m in medlem)
{
     var namn = m.namm;
     ...
}
Run Code Online (Sandbox Code Playgroud)

要么

 var m1 = medlem.First();
Run Code Online (Sandbox Code Playgroud)


psu*_*003 5

在 C# 中,var不是无类型类型。它实际上是一种隐式键入对象的方法,而无需键入整个类型名称。

例如:

var someString = "Any String Value";
Run Code Online (Sandbox Code Playgroud)

string someString = "Any String Value";
Run Code Online (Sandbox Code Playgroud)

编译为完全相同的 IL。

因此,在您的情况下,LINQ 返回一个IEnumerable<T>集合,其中 T 是对象的类型medlemar

由于它是一个集合,因此您需要像访问任何其他集合一样访问它。一种可能性是使用foreach

foreach(var m in medlem)
{
    //Do Something
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性是调用ToList()然后通过索引访问各个成员:

var medlemList =  medlem.ToList();
var namn = medlemList[i].namn;   // where i is some specific index in the collection
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想获取集合中的第一个对象,则根据您的用例,您有多种选择:

var firstMedlem = medlem.Single();
var firstMedlem = medlem.First();
var firstMedlem = medlem.SingleOrDefault();
var firstMedlem = medlem.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

上面的每一个都做大致相同的事情,但如果集合有零个或多个对象,则行为会有所不同。

Single()将返回集合中唯一的对象。如果集合包含多个对象或零个对象,则会抛出异常。同样,SingleOrDefault()如果有多个对象,也会抛出异常,但会返回返回的值default(T)(通常为 null,除非 T 是值类型)。

First()并且FirstOrDefault()行为方式相同,First()如果集合为空,则会抛出异常并FirstOrDefault()返回默认值。它们与Single..()方法的不同之处在于,如果集合有多个值,它们将始终返回第一个成员。

所以基本上,FirstOrDefault()除非集合本身为空,否则永远不会抛出异常。其他变体将在一种或多种情况下引发异常,具体取决于IEnumerable<T>集合的内容。