1

我现在有这样的东西,它只搜索 1 LabID

List<Expense> lstExpenses = (from l in ctx.Expenses
                             where l.datLab.Lab_ID == labID
                             select l).ToList<Expense>();

我如何返回 Lab_ID 在我拥有的字典中的所有结果:

以下函数返回一个字典值: report.GetLabChildren(labID, "All");格式<short>,<string>。我只想搜索<short>

4

3 回答 3

3

如果要在 linq 中对对象进行过滤:

var query = ctx.Expenses.AsEnumerable()
    .Where(expense => dictionary.ContainsKey(espense.Lab_Id));

如果你想要一些可以翻译到数据库的东西:

var ids = dictionary.Keys.ToList();
var query = ctx.Expenses
    .Where(expense => ids.Contains(expense.Lab_Id));

请注意,这仅在您的字典中的键少于几千个时才有效,因为它被转换为 SQL IN 子句。如果您有更多,则将它们上传到临时表并连接两个表,或者拉整个Expenses表并使用 linq to objects 版本。

于 2013-09-19T18:17:16.447 回答
1

我不是 100% 确定你在问什么,但看起来你正在寻找ContainsKey方法:

var values = report.GetLabChildren(labID, "All");

List<Expense> lstExpenses = (from l in ctx.Expenses
                             where values.ContainsKey(l.datLab.Lab_ID)
                             select l).ToList<Expense>();

我不确定,但它有可能不适用于 LINQ to Entities。如果发生,请使用以下内容:

List<Expense> lstExpenses = (from l in ctx.Expenses
                             where values.Keys.Contains(l.datLab.Lab_ID)
                             select l).ToList<Expense>();
于 2013-09-19T18:17:25.557 回答
1
List<Expense> lstExpenses = (from l in ctx.Expenses
                      where report.GetLabChildren(labID, "All").Keys.Contains(i.Lab_ID)
                      select l).ToList<Expense>();
于 2013-09-19T18:18:03.867 回答