除了查询的主题和参数之外,我有几个相同的查询,我试图制定一个“通用”查询,以避免多行几乎相同的代码。
我有以下代码:
代码段
private IEnumerable doQuery(string rangeVar,
DataSet dsSubTable,
string qrySubject,
string subTableKey,
string subTableDescription,
string fldName)
{
qryStart = dtmpickFrom.Value;
qryEnd = dtmpickTo.Value;
var groupQuery =
from trans in dataSet.Transaction
where ((trans.T_Date >= qryStart) && (trans.T_Date <= qryEnd))
from rangeVar in dataSet.dsSubTable <<<<<<
where trans.qrySubject == rangeVar.subTableKey
select new ..... <snipped>
编译器不会接受带有以下消息的dsSubTable(显示为&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
'ExpenditureLINQDataSets.Expenditure'不包含'dsSubTable'的定义 没有扩展方法'dsSubTable'接受'ExpenditureLINQDataSets.Expenditure'类型的第一个参数 可以找到(你错过了使用指令或汇编引用吗?)'
我当然意识到这一点(如果我尝试给dsSubTable一种支出......只有我的DataSet中定义的实际表名出现在Intellisense中。)
是否可以概括这些LINQ查询,或者我的代码中是否必须使用多个相同的查询?
任何帮助表示赞赏!
答案 0 :(得分:1)
如果您将dsSubTable作为DataTable传入,那么您可以直接在dsSubTable中使用它来实现。
但感觉就像你滥用Linq一样。 Linq的强大之处在于它不是Sql,所以你为什么要编写一个方法而不是将Sql连接在一起的字符串,你正在构建一个Linq表达式。
Linq允许您根据集合来考虑您的数据,这就是我发现的真正强大的数据。我鼓励您在调用'doQuery'并将这些查询编码为头等操作时考虑您要完成的任务。