我有以下代码.它运行正常.
在我标记的地方,我想写一个查询(我假设有LINQ),它提取CompanyName where了MainKey == 3028
我怀疑这是微不足道的,但我是新手LINQ,我LINQ在MSDN上查找了一些基本信息,似乎无法让它工作.
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)
加 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.
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |