0

我有一个 var 变量,它只有一列,我想将该列与数据库表连接起来。我的代码如下:

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

4 回答 4

0

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

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

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

编辑

有关更多背景,请参见此处

于 2012-09-14T08:55:29.670 回答
0

这是查找内容的示例应用程序。我拿了两个列表客户,另一个是 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;
        }
    }
}


于 2012-09-14T09:33:31.760 回答
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();  

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

于 2012-09-14T10:57:18.063 回答
0

使用List<int> notlinked而不是var notlinked. 而是加入使用 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(); 
于 2012-09-15T16:02:41.287 回答