嗨,这就是我到目前为止所拥有的... 在我的控制器中:
public ActionResult SingleFeed (string linename)
{
var result = (from x in db.is1
where x.in_service == "Y"
join y in db.isckts on
x.is_id equals y.is_id
where y.line_name == linename
group new {x, y} by x.is_id into xyg
where xyg.Count() == 1
select xyg);
var SFM = new CircuitsViewModel()
{
IsDetails = result.ToList()
};
return View(SFM);
}
我认为:
public class CircuitsViewModel
{
public List<is1> IsDetails { get; set; }
public List<isckt> IscktDetails { get; set; }
}
我最终得到
无法隐式转换类型 'System.Collections.Generic.List(System.Linq.IGrouping(short, (匿名类型:is1 x,isckt y)))'至 'System.Collections.Generic.List(is1)
想知道是否有人可以帮助解决此错误。当我尝试使用LINQ分组时开始发生,但我不知道如何为Viewmodel建模或更改LINQ查询以匹配类型。
LINQ查询背后的想法是返回在表isckts的id列中没有重复条目的记录。
更新: 当前试图找出如何在db.isckts.is_ID中查找重复项,然后对IS_ID进行联接,然后在何处指定line_name和in_service
任何帮助将不胜感激!干杯!
答案 0 :(得分:1)
您似乎只希望db.is1
中没有重复的db.isckts
匹配行的行,因此您只需要分组并返回is1
行。
var result = from x in db.is1
where x.in_service == "Y"
join y in db.isckts on x.is_id equals y.is_id
where y.line_name == linename
group x by x.is_id into xg
where xg.Count() == 1
select xg.First();
但是,由于您只是使用分组来计算联接的行,因此可以使用LINQ Group Join运算符来代替:
var AjoinB = from x in db.tableA
where x.inservice
join y in db.tableB on x.is_id equals y.is_id into yj
where yj.Count(y => y.line_name == linename) == 1
select x;
我切换到lambda语法以将条件添加到y
的计数中;您也可以使用db.tableB
方法将条件添加到Where
,甚至可以创建一个子查询来表示已过滤的db.tableB
:
var filtered_isckts = from y in db.isckts
where y.line_name == linename
select y;
var result = from x in db.is1
where x.in_service == "Y"
join y in filtered_isckts on x.is_id equals y.is_id into yj
where yj.Count() == 1
select x;
要将filtered_isckts
修改为仅包含一行的id
,请在第一个查询上进行分组:
var filtered_isckts = from y in db.isckts
where y.line_name == linename
group y by y.is_id into yg
where yg.Count() == 1
select yg.First();
var result = from x in db.is1
where x.in_service == "Y"
join y in filtered_isckts on x.is_id equals y.is_id
select x;
答案 1 :(得分:0)
因为linq组不返回List<IsDetails>
您应该使用result.Select(x => new IsDetails {});