我有一个结果,按理说这里只是个表达式。如下:
var query=from m in db.Student
select new{
id=m.id,
name=m.name
}
//有一个要被匹配的数组
string[]arr={"小张","小红","小明"};
//这里要做的是,从query中匹配出包含arr中人名的信息。若arr中有的人名没匹配到,则id设为-1。(类似于一个arr的左连接)
//最好还是用query来接收这个结果。我这里只能匹配出一致的那部分,arr中不在query中的那部分怎么显示出来,并设置id=-1呢。
query=query.where(m=>arr.contains(m.name))
或者您有其他设计方案,麻烦告知,初学linq,万分感谢!
这样:
//测试数据
List<Student> lst = new List<Student>
{
new Student{ id = 1, name = "小丽"},
new Student{ id = 2, name = "小红"},
new Student{ id = 3, name = "小明"},
};
var query = from m in lst
select new
{
m.id,
m.name
};
string[] arr = { "小张", "小红", "小明" };
List<Student> temp = new List<Student>();
Student model;
for (int i = 0; i < arr.Length; i++)
{
//把不存在的加进去
if (!query.Any(q => q.name == arr[i]))
{
model = new Student
{
id = -1,
name = arr[i]
};
temp.Add(model);
}
}
var query1 = from t in temp
select new
{
t.id,
t.name
};
query = query.Union(query1);//合并
var dd = query.ToList();
//打印结果
for (int i = 0; i < dd.Count; i++)
{
Console.WriteLine(dd[i].id + "----" + dd[i].name);
}
好的,谢谢。你的lst应该就是指的query.where(m=>arr.contains(m.name))后的数据吧。遍历数组,取出不在部分。不过query.Any(q => q.name == arr[i])这句会不会一直链接库。因为他是在循环里,而这种写法只要有数据要被使用就要链库吧?
怎么把一头大象装进冰箱?
var query=from m in db.Student
where arr.contains(m.name)
select new{
id=m.id,
name=m.name
}
先找出一致的信息,然后再从数组中根据一致的,找出剩余的对不?
query这里暂时不能tolist();因为我后面还有很多代码都是用的query,tolist之后,后面的就都得变。