-2

我在一个查询中组合两个列表时遇到问题:

public class Class1 {
    public int id { get; set; }
    public List<Class2> attr { get; set; }
}

public class Class2 {
    public int id { get; set; }
}

我的查询如下所示:

var q = (from m in context.table
                 select new Class1
                 {
                     id = m.ID,
                     attr = (from t in context.table2
                                 where m.id == t.id
                                 select new Class2 { 
                                    id= t.id
                                 }).Take(5).ToList()
                 }).Take(1).ToList();

这个问题有什么解决方案吗?

问题: 我的问题是我的结果总是空的。如果我删除第二个查询

                     attr = (from t in context.table2
                                 where m.id == t.id
                                 select new Class2 { 
                                    id= t.id
                                 }).Take(5).ToList()

,我的查询有效!

4

3 回答 3

1

下面的代码完美运行(我context用我的自定义变量替换了你的变量),所以,在我看来,你最好检查你的where陈述

using System.Linq;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Class1
    {
        public int id { get; set; }
        public List<Class2> attr { get; set; }
    }

    public class Class2
    {
        public int id { get; set; }
    }

    class MyEntity
    {
        public int ID { get; set; }
        public MyEntity(int id)
        {
            ID = id;
        }
    }
    class MyContext : List<MyEntity>
    {
    }

    class Program
    {
        static void Main(string[] args)
        {

            var context = new MyContext();
            context.Add(new MyEntity(1));
            context.Add(new MyEntity(2));
            context.Add(new MyEntity(3));
            context.Add(new MyEntity(4));
            context.Add(new MyEntity(5));

            var q = (from m in context
                     select new Class1
                     {
                         id = m.ID,
                         attr = (from t in context
                                 where m.ID == t.ID
                                 select new Class2
                                 {
                                     id = t.ID
                                 }).Take(5).ToList()
                     }).Take(1).ToList();
        }
    }
}
于 2012-11-27T15:16:26.907 回答
0

你可以尝试这样的事情: -

 var listAB = listA.Cast<object>().Union(listB.Cast<object>()).ToLookup(x => x is TypeA ? (x as TypeA).Key : (x as TypeB).Key)
            .Select(kv => {
                var a = kv.FirstOrDefault(x => x is TypeA) as TypeA;
                var b = kv.FirstOrDefault(x => x is TypeB) as TypeB;
                return new TypeAB() {
                    Key = kv.Key,
                    ValueA = a != null ? (int?)a.Value : null,
                    ValueB = b != null ? (int?)b.Value : null
                };
            }).ToList();
于 2012-11-27T14:52:02.573 回答
0

我找到了灵魂。而不是使用 List<> 我将其更改为 IQueryable<> 现在它可以工作了。

我记得我的错误消息:“linq to entity 无法识别方法列表...linq 此方法无法转换为商店表达式”

有人明白吗?

于 2012-11-27T16:04:49.230 回答