加入linq中的结果列表

时间:2012-09-14 08:39:17

标签: .net linq linq-to-sql

我有一个var变量,它有一个列,我想用数据库table连接该列。我的代码如下:

var notlinked = _client.Except(linked).ToList();
var result = (from e in iEnt.clientmasters 
              join g in notlinked on e.ClientID equals g.ClientID 
              select e).ToList();  

现在notlinked有一个列,并依赖于我想要从数据库中检索信息所以在下一行我正在加入到该表但是当我执行它时会出现以下错误:

  

无法创建“匿名类型”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。

建议我解决这个问题

4 个答案:

答案 0 :(得分:0)

我不太了解Linq对Sql的影响,但是我猜测的是,你试图在来自数据库的东西和内存中的列表之间进行连接。你应该这样做:

var result = 
    from e in iEnt.clientmasters 
    where notlinked.Contains(e.ClientID)
    select e

在这种情况下,我认为Linq to Sql应该能够生成SQL IN(...)子句。没有经过测试,但你明白了。

修改

有关更多背景信息,请查看示例here

答案 1 :(得分:0)

以下是查找内容的示例应用程序。我有两个列表Customer,另一个是int列表。


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

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


            List customers=new List();
            customers.Add(new Customer(1,"Jalpesh"));
            customers.Add(new Customer(2, "Kaushal"));
            customers.Add(new Customer(3, "Mahesh"));

            List intList=new List{1,2};


            var customerList = customers.Where(c => intList.Contains(c.Id));

        }


    }

    public class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public Customer(int id,string name) {
            Id = id;
            Name = name;
        }
    }
}


答案 2 :(得分:0)

您可以跳过连接,而只是从LINQ

编写自己的输出
var notlinked = _client.Except(linked).ToList();
var result = (from e in iEnt.clientmasters 
              from g in notlinked 
              where e.ClientID == g.ClientID 
              select new 
              {
                  Colomn1 = e.firstColomn
                  Colomn2 = g.secondColomn
              }).ToList();  

这不是最优雅的方式,但是当其他想法都失败时,我倾向于这样做。

答案 3 :(得分:0)

使用List<int> notlinked代替var notlinked。而是JOIN使用WHERE子句并检查notlinked包含e.ClientID

List<int> notlinked = _client.Except(linked).Select(o => o.ClientID).ToList<int>();
var result = (from e in iEnt.clientmasters 
              where notlinked.Contains(e.ClientID)
              select e).ToList();