LINQ查询婴儿步骤

why*_*heq 4 c# linq

我有以下代码.它运行正常.

在我标记的地方,我想写一个查询(我假设有LINQ),它提取CompanyName whereMainKey == 3028

我怀疑这是微不足道的,但我是新手LINQ,我LINQMSDN上查找了一些基本信息,似乎无法让它工作.

namespace EntityFrameworkExperiment {
class Program {

    static void Main(string[] args) {
        var models = SelectTop100Models("SELECT top 100 * FROM WH.dbo.vw_DimXXX");
        Console.Write("hello world");

        //<<<<<<<linq query to pull out companyname when MainKey == 3028

        Console.Read();
    }

    static IEnumerable<MyModel> SelectTop100Models(string myCommandText) {
        var connectionString = ConfigurationManager.ConnectionStrings["XXX"].ConnectionString;
        using(var conn = new SqlConnection(connectionString))
        using(var cmd = conn.CreateCommand()) {
            conn.Open();
            cmd.CommandText = myCommandText;
            using(var reader = cmd.ExecuteReader()) {
                while(reader.Read()) {
                    yield return new MyModel {

                        MainKey = reader.GetInt32(reader.GetOrdinal("MainKey")),
                        ServerId  = reader.GetInt32(reader.GetOrdinal("ServerId")),
                        CompanyId = reader.GetInt32(reader.GetOrdinal("CompanyId")),
                        CompanyName = reader.GetString(reader.GetOrdinal("CompanyName")),


                    };
                }
            }
        }
    }
}

public class MyModel {

    public int MainKey { get; set; }
    public int ServerId { get; set; }
    public int CompanyId { get; set; }
    public string CompanyName { get; set; }

}

}
Run Code Online (Sandbox Code Playgroud)

Kna*_*ģis 7

using System.Linq

查询应该是

var companyName = models
  .Where(o => o.MainKey == 3028) // apply the filter
  .Select(o => o.CompanyName)    // tell it you only need the one property
  .FirstOrDefault();             // take the first result it finds or use 'null' if the MainKey does not exist
Run Code Online (Sandbox Code Playgroud)

但是有一点你必须记住 - 在这里你没有使用LINQ查询到SQL服务器 - 而是你在内存中检索所有数据,然后在.NET中过滤它们.这意味着如果数据库包含数百万行,它们将全部从SQL服务器中提取.您正在应用TOP 100,但如果密钥3028不在前100个内,那将使您遇到麻烦.

您应该做的是使用Entity Framework(或类似工具)创建模型,然后编写一个针对其生成的类的查询.但好处是LINQ查询将完全相同 - 它将在幕后转换为SQL.