我有一个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')。
建议我解决这个问题
答案 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();