LINQ-在另一个中使用来自一个的结果

本文关键字:一个 结果 另一个 LINQ- | 更新日期: 2023-09-27 17:58:04

我对LINQ完全陌生,我想把我的一些SQL查询重写到LINQ中(只是为了学习),但我一开始就被卡住了。也许解决方案很简单,但正如我所说,我是一个全新的人,我并没有找到解决方案。

我有一个问题:

string typMoneta = textBox1.Text;
var moneta = from x in db.grupyTowarowes
             where x.typ == typMoneta
             select new
             {
                 x.grupa
             };

当我设置时,哪个工作正常

dataGridView1.DataSource = moneta;

然后我得到了输出

我想在我的第二个查询中使用这个输出:

var query = from c in dbContext.Picking
            where c.Number == 1000 && c.Group == moneta
            select new
            {
                c.id
            };

c.Group == moneta出现问题。我不知道正确的语法。有人能帮我吗?

LINQ-在另一个中使用来自一个的结果

我想您打算使用moneta.Contains(c.Group)。在第一个查询中,确保使用ToList()将数据加载到内存中。

IList<string> moneta = (from x in db.grupyTowarowes
    where x.typ == typMoneta
    select x.grupa).ToList();
var query = (from c in dbContext.Picking
    where c.Number == 1000 && moneta.Contains(c.Group) 
    select c.id).ToList();

monetaIEnumerable<T>,其中Tgrupa的类型话虽如此,你应该写下你的查询如下:

var query = from c in dbContext.Picking
            where c.Number == 1000 
            && moneta.Contais(c.Group)
            select new
            {
                c.id
            };

或使用流畅的语法,如以下所示:

var query = dbContext.Picking
                     .Where(pick => pick.Number == 1000 
                                 && moneta.Contains(pick.Group))
                     .Select(pick => pick.id);
注意moneta不是字符串的集合。它是一个对象集合,具有名为"grupa"的字符串属性。

这对你有用吗?

var query =
    from c in dbContext.Picking
    where c.Number == 1000
       && moneta.Any(m => m.grupa == c.Group)
    select new { c.id };

你也可以这样做:

// Get list of strings
var groups = moneta.Select(m => m.grupa).ToList();
// Get items where "Group" value is one of the strings in groups list, above.
var query =
    from c in dbContext.Picking
    where c.Number == 1000
       && groups.Contains(c.Group)
    select new { c.id };