一个关于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]
[解决办法]
依旧不行
[解决办法]
有别的办法么 不要再多一个类
[解决办法]
你要先搞清楚数据访问层的作用
还有,多加一个类几会增加几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,...);
}