【问题标题】:LINQ query - search in SQL Server databaseLINQ 查询 - 在 SQL Server 数据库中搜索
【发布时间】:2014-05-01 18:35:32
【问题描述】:

我正在尝试编写一个在我的数据库中搜索匹配项的方法。

我有一个组合框(代码为 volba),它应该告诉在哪一列中查找匹配项和文本框(代码为 retezec),它应该是搜索词。

调试后发现,我的查询(dotaz)始终是空的,即使我能亲眼看到匹配。

有什么建议吗?

DataDataContext db = new DataDataContext();
string volba = "a." + Vyber.Text;
string retezec = txt.Text.ToString();

DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Nazev");
dt.Columns.Add("Popis");
dt.Columns.Add("Vyrobce");
dt.Columns.Add("Kusu");
dt.Columns.Add("Cena");
DataRow row = null;

var dotaz = from a in db.Zbozis
            where volba == retezec
            orderby a.Id
            select a;

foreach (var radek in dotaz)
{
    row = dt.NewRow();
    dt.Rows.Add(radek.Id, radek.Nazev, radek.Popis, radek.Vyrobce, radek.Kusu, radek.Cena);
}

zboziDataGrid.ItemsSource = dt.DefaultView;

【问题讨论】:

  • 检查生成的SQL: ((System.Data.Objects.ObjectQuery) dotaz ).ToTraceString();我猜你的问题出在 where 子句中
  • 上帝 - why on earth 将获取 Linq 查询的结果(这是一个很好、易于使用 .NET 对象)并将其转为回到DataTable 的蹩脚行/列表示......使用ORM 和Linq 的全部意义是你不必处理不再使用这种无类型、不安全的列和行格式,但您可以使用强类型、类型安全的 .NET 对象!
  • 因为这是我的第一个想法,如何在我的数据网格中显示结果。如果你有更好的,然后告诉我。我是 C# 和一般编程的新手 :) 所以问题出在 volba 中,当我尝试使用 a.Vyrobce 时,它​​工作得很好,只是不接受字符串。那么新的问题,如何在where子句中添加变量volba,让程序可以接受?
  • 嗯,你拥有的 LINQ 语句应该给你一个 IEnumerable<Zbozis> - 基本上是 Zbozis 列表 的一个花哨的名字 - 你为什么不只是绑定那个列表到电网?完毕!这里绝对不需要乱七八糟的来回代码 - 只需使用 LINQ 选择您的数据,并将该结果绑定到网格或列表视图或您正在使用的任何东西
  • 有道理,我试试,谢谢。

标签: c# sql-server wpf linq wpfdatagrid


【解决方案1】:

您的查询没有按照您的预期进行。基本上这就是它正在做的事情:

from a in db.Zbozis
where "a.Property" == "x"
orderby a.Id
select a;

而不是

from a in db.Zbozis
where a.Property == "x"
orderby a.Id
select a;

显然,第一个查询永远不会返回任何内容,因为谓词永远不会为真。

您需要一个工具或方法将包含属性名称和参数的字符串转换为表达式Dynamic LINQ 经常用于此目的。也可以通过 NuGet 获得。

【讨论】:

  • 我也是这么想的。所以我下载了 Dynamic LINQ 库,但到目前为止,还没有成功。
【解决方案2】:

用这个来跟踪你要去的地方有点棘手。我建议使用 LINQPad 并使用它来测试您的 LINQ。它可以连接到您的数据库并执行 LINQ。

就尝试匹配数据库中的文本而言,LINQPad 提供了一些示例,可以帮助您更好地了解您要完成的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多