读书人

一个关于LINQ的有关问题

发布时间: 2012-12-15 15:16:03 作者: rapoo

一个关于LINQ的问题
本帖最后由 stszd604 于 2012-07-13 14:20:06 编辑 场景 fcategory 在 t_products是编码 他的名称在 t_prod_category表中

目的 fcategory 显示的是t_prod_category的 fcatename

问题 当在 LINQPAD中 强行指定了返回类 红色部分程序就出错了
如果去掉红色部分 使用匿名类型是完全可以的
因为这段代码在 数据访问层 所以。。。 需要指定返回类型 




from p in t_products
join c in t_prod_category
on p.fcategory equals c.fcategory
select new t_products
{
fsku = p.fsku,
fcategory= c.fcatename,
fproname=p.fproname,
funit_price= p.funit_price,
fdescription= p.fdescription
}



完整方法体 如下

public IQueryable<t_products> GetAll()
{

var res =
from p in t_products
join c in t_prod_category
on p.fcategory equals c.fcategory
select new t_products
{
fsku = p.fsku,
fcategory= c.fcatename,
fproname=p.fproname,
funit_price= p.funit_price,
fdescription= p.fdescription
};
return res;



}


[解决办法]


public IEnumerable<t_products> GetAll()
{

var res =
(from p in t_products
join c in t_prod_category
on p.fcategory equals c.fcategory
select new t_products
{
fsku = p.fsku,
fcategory= c.fcatename,
fproname=p.fproname,
funit_price= p.funit_price,
fdescription= p.fdescription
}).Select(x=>new t_products(){fsku=x.fsku,fcategory=x.fcategory,...});
return res;



}



[解决办法]
你可以自己定义一个综合性的Model,如下

 public class TestMode
{
public int no { get; set; }
public string code { get; set; }
}


IQueryable<TestMode> result = from a in EF.T_Province join b in EF.T_City on a.ID equals b.Province_ID select new TestMode { no = a.ID, code = b.Name }; 



[/code]
[解决办法]
引用:
C# code

public IEnumerable<t_products> GetAll()
{

var res =
(from p in t_products
join c in t_prod_category
on p.fcategory equals c.fcategory
select new t_products
{
fsku = p.fsku,
……


依旧不行
[解决办法]
引用:
你可以自己定义一个综合性的Model,如下

C# code
public class TestMode
{
public int no { get; set; }
public string code { get; set; }
}


C# code
IQueryable<TestMode> result = from a in……



有别的办法么  不要再多一个类
[解决办法]
你要先搞清楚数据访问层的作用

还有,多加一个类几会增加几KB的硬盘容量,为何不能添加?
[解决办法]
引用:
你要先搞清楚数据访问层的作用

还有,多加一个类几会增加几KB的硬盘容量,为何不能添加?


想知道有没有 不用加类的办法

如果这里的类变化了
1 Action 里面的动态表达 也要跟随这个地方变化
2 由于 Action 传递的Model过来 那么ACTION的参数类名变化
3 model变化之后 MODELBINDING也要随之改变

当然后续的这些问题 都是业务层 动态添加where导致的


业务层代码 大致如下

public josnresult GetData(t_products model)
{
var where = model.ExpressionEqual("fcategory",model.fcategory);
var result = repos.getAll().Where(where).toList();
return json(result,...);
}



读书人网 >.NET Framework

热点推荐