【发布时间】: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